2009-03-02 1 views
2

저는 온라인 사진 커뮤니티를 운영하고 있습니다. 사이트가 데이터베이스 액세스에서 크롤링을 당하고 때로는 시간 제한을 초과하는 것으로 보입니다.SQL Server 유지 관리 제안?

나는 SQL 쿼리를 작성하고 테이블을 설계하는 것이 상당히 바람직하다고 생각하지만, 결코 DBA가 아닙니다 ... 따라서 문제입니다.

일부 배경 :

  1. 내 사이트와 SQL 서버가 원격 호스트에서 실행된다. Visual Studio와 SQL Server에서 SQL Server Mgmt를 통해 ASP.NET 코드를 업데이트합니다. Studio Express. 나는 서버에 물리적으로 접근 할 수 없다.

  2. 내 모든 저장된 procs (나는 그들 모두를 가지고있는 것 같아요) 거래에 래핑됩니다.

  3. 주 테이블은 현재 9400 개 레코드입니다. 나는 야간에이 테이블에 12 개의 새 레코드를 추가합니다.

  4. 다른 주 표의 데이터를 단일보기로 결합하는보기가이 기본 표에 있습니다.

  5. 보조 테이블은 더 작은 레코드이지만 그 중 많은 레코드입니다. 한 명은 70,000 명, 한 명은 115,000 명입니다. 이것들은 # 3의 항목에 대한 코멘트 및 등급 기록입니다.

  6. 색인은 가장 필요한 필드에 있습니다. 그리고 큰 테이블에서 자동 재 계산 통계로 설정했습니다.

나는, 트랜잭션 로그, 업데이트 통계를 지우 기본보기를 재 구축뿐만 아니라, 의견, 속도 수익을 얻을 수있는 저장 프로 시저를 다시 작성하는 코드를 실행하면 사이트가, 중단 갈기

. 그러나 나는 이것을 수동으로해야만한다.

슬프게도 내 사용자는 이러한 문제에 좌절하고 참여가 줄어 듭니다.

내 질문은 ... 원격 환경에서 설치 프로그램을 계획하고 유지 관리 계획을 수립하는 가장 좋은 방법은 무엇입니까?

감사합니다. KLK

답변

0

유지 관리 작업을 유지 관리 계획으로 설정할 필요가 없습니다.

간단히 수행 할 유지 관리 작업을 수행하는 저장 프로 시저를 만들 지수는

그런 다음 저장 프로 시저/S를 호출하는 작업을 생성, 통계 업데이트 등을 다시 작성합니다. 작업은 원하는 일정에 따라 실행되도록 구성 할 수 있습니다.

작업을 만들려면 sp_add_job 절차를 사용하십시오.

일정을 만들려면 sp_add_schedule 절차를 사용하십시오.

자세한 내용을 분명하고 이해할 수 있지만 추가 도움이 필요하면 자유롭게 저에게 연락을주십시오.

환호,

+0

왜 유지 보수 장소 대신 저장 프로 시저에서 사용합니까? –

+0

원래 포스터가 SQL Server Express를 사용하고 있다고 가정합니다. SQL Server Mgmt Studio Express를 사용하고 있기 때문입니다. SQL Server Express는 Integration Services를 설치해야하므로 유지 관리 계획을 지원하지 않습니다. –

+0

실제로 DB는 SQL Server 2005입니다. Mgmt Studio Express는 원격 DB에 연결하는 데 사용하는 도구 일뿐입니다. – klkitchens

2

내 직감은 당신이 뭔가 잘못하고 있다고 말합니다.어떤 서버가 야간에 서버를 재부팅하지 않으면 시스템이 계속 작동하지 않는 경우와 같은 소리가 들립니다.

쿼리에 문제가있는 경우 행의 수는 거의 항상 성능과 데이터베이스와 관련이 없습니다 어쨌든 아주 작습니다. 나는 SQL 서버에 익숙하지 않지만 꽤 달콤한 쿼리 분석 도구를 가지고 있다고 생각한다. 또한 느린 쿼리를 로깅하는 방법이 있다고 상상해보십시오.

누락 된 색인이있는 것 같습니다. 물론 올바른 색인을 추가했다고 생각할 수도 있지만, 사용 중인지 확인하기 전까지는 문제가되지 않습니다. 어쩌면 당신은 당신이 옳은 사람이라고 생각 하겠지만, 당신의 질문은 그렇지 않다는 것을 암시합니다.

먼저 쿼리를 기록하는 방법을 알아보십시오. 확률은 인덱스가 고칠 수있는 순차적 스캔을 수행하는 킬러가 있다는 점에서 매우 좋습니다.

둘째, 대신 작은 쿼리를 사용하여이를 죽이는 경우가 있습니다. 예를 들어, user_id에서 사용자 이름을 찾을 때마다 데이터베이스를 조회하는 "사용자"객체가있을 수 있습니다. 데이터베이스를 100 번 쿼리하고 캐시로 대체하는 지점을 찾으십시오. "캐시"가 요청의 끝에서 지워지는 개인 변수 이상인 경우에도 마찬가지입니다.

결론은 SQL Server에서 잘못 구성된 것입니다. 내 말은, 시스템이 정지하기 때문에 매일 밤 서버를 재부팅해야한다면, 시스템이나 코드를 비난하겠습니까? SQL Server가 제공하는 도구를 배우면, 꽤 매끄럽습니다 .-

모두가 말했듯이, 일단 당신이 뭔가 잘못하고 있다고 받아들이면 그 과정을 즐기십시오. 필자는 저속 데이터베이스 쿼리를 최적화하지 않습니다. 10 초 런타임으로 쿼리를 수행하고 잘 배치 된 단일 인덱스로 50ms 런타임을 사용하여 쿼리를 실행할 수 있다는 것은 놀랍습니다.

+0

불행히도, 나는 이것이 사실이라고 생각하지 않습니다. 코드는 절대적으로 잘 실행되고 시간이 지나면 정확히 동일한 코드가 느리게 실행됩니다. 인덱스를 재구성 할 때까지는 고정되지 않습니다. 그런 다음 번개가 빨리 실행됩니다. – klkitchens

+0

시간이 지남에 따라 자격을 부여할까요? 매일 특정 테이블 인덱스를 다시 인덱싱하는 것은 드문 일이 아닙니다. 응용 프로그램에서 생성 된 활동 유형에 따라 색인이 얼마나 빨리 조각 나는지 판단됩니다. –

+0

이상한. 어떤 종류의 활동이 색인을 재건해야합니까? 나는 이런 종류의 문제를 접해 보지 못했지만, 나는 그것을 들어 봤다. 테이블 업데이트 소식? –