문제

나는 아주 특별한 성능 문제에서 작품!

시스템에서 우리가 사용하는 있는 테이블 보유하는 정보에 대해 현재의 워크플로우 프로세스.필드 중 하나를 보유하고 스프레드시트에 포함된 메타데이터에 대한 프로세스(이유를 묻지 마세요!!그리고 나는 그것을 변경할 수 없습니다!!)

문제는 이 스프레드시트에 저장된 이미지 분야에서는 SQL Server2005 년(데이터베이스 내에서 설정한 SQL2000 호환성).

이 테이블은 현재 22K+선하고도 간단한 다음과 같이 쿼:

SELECT TOP 100 *
  FROM OFFENDING_TABLE

30 초 정도 걸립을 검색하의 데이터 쿼리 분석기.

나는 생각하고 업데이트에 대한 호환성 SQL2005 년(면 나는 정보는 처리할 수 있다).

두 번째는 나는 생각을 변경하여 데이터의 유형은 열 varbinary(max) 하지만 내가 알지 못하는 경우 이에 영향을 미칠 것입니다.

다른 것은 내가 고려를 사용하는 것입 sp_tableoptionlarge value types out of row 하기 1 그것은 현재 0, 지만,나는 어떠한 정보를 수행하는 경우 이것은 성능을 향상시킬 수 있습니다.

지 성능 향상을 위해 이러한 시나리오에서는?


편집을 명확히

내 문제는 없어서 응용 프로그램이 무엇을 요청하는 SQL Server,그리고 나는 일부에 반영 그것은(응용 프로그램입니다.NET1.1 웹 사이트)및 그 사용하여 잘못된 필드를 위해 일부터는 나는 아이디어가 있지 않을 것입니다.

내가 필요한 전반적인 성능을 향상시키기 위해 이 표입니다.

도움이 되었습니까?

해결책

내가 권하고 싶을 찾으로 잘못된 테이블 레이아웃이 건강:

select * from sys.dm_db_index_physical_stats(
       db_id(), object_id('offending_table'), null, null, detailed);

것을 너무 찾다 avg_fragmentation_in_percent,page_count,avg_page_space_used_in_percent,record_count 및링 하는 ghost_record_count.단서를 다음과 같이 높은 조각,또는 높은 수의 레코드 또는 저렴한 페이지를 사용 퍼센트 문제를 나타내고 일을 개선할 수 있는 꽤 다만 다시 작성하여 인덱스(ie.테이블)from scratch:

ALTER INDEX ALL ON offending_table REBUILD;

내가 이것을 말하려는 변경할 수 없습니다 테이블도니다.는 경우에 당신을 변경할 수 있는 테이블과 응용 프로그램,통보 당신은 이미 당신은 좋은 통보(사용하지 않는'*','말라 선택 w/o 상태를 사용하여 새로운 varbinary(max)형식 등 etc.).

나는 또한 페이지의 평균 수명 성능을 카운터는 경우 이해하는 시스템 메모리에 굶주렸다.에서 귀하에 대한 설명 symptomps 시스템 IO 바로 저를 이끌었는데요가 있다고 생각하는 작은 페이지를 캐싱하고,더 RAM 할 수 있는 데 도움뿐만 아니라,빠른 IO 하위 시스템.에는 SQL server2008 시스템은 또한 돌고 페이지를 압축하지만,2005 년에 당신은 할 수 없습니다.
고는지 확인하기 위해,확인,쿼리에 의해 차단되지 않은 경쟁 응용 프로그램 자체에서,ie.쿼리지 않을 보내고의 90%가 30 초 동안 기다리고 행 잠급니다.보 sys.dm_exec_requests 쿼리가 실행되는 동안,보 wait_time,wait_type 및 wait_resource.그것은 PAGEIOLATCH_XX?나 그것은 잠?또한,방법 sys.dm_os_wait_stats 서버에 무엇이 있는 최고 기다릴 이유?

다른 팁

첫째 모든 하지 않는 이제까지 SELECT * 에서 생산 코드고 보고하거나지 않습니다.

당신은 세 가지 기본적인 선택:

  • 이동 blob 분야로 별도의 테이블지 않은 경우 항상 필요합니다;아마 실용적이지 않기 때문에 당신이 언급 변경할 수 없습니다 스키마

  • 더 조심해 귀하의 SELECT 문 선택하려면 필드만 당신이 정말로 필요 및 생략 blob 분야

  • 참조할 수 있는 경우 제한 쿼리를 포함됩 WHERE 절하는 방법을 찾을 최적화하는 쿼리 계획에 의해 예:추가 적합한 인덱스 테이블(할 수 있는 경우)

마술"이 더 빨리"전환-하지만 당신은 수를 최적화하는 쿼리를 최적화하거나 테이블 레이아웃이 있습니다.모두 도움이됩니다.할 수 없는 경우에는 아무것도 변경하지 않 테이블 레이아웃으며,추가 지수,또는 변경 쿼리,당신은 힘든 시간을 최적화하도,난 두려워합니다....

그냥 변경하는 필드를 VARBINARY(MAX)지 않을 것이 아무것도 변경에서 모두 성능 향상이 이루어지지 않았습을 예상해서 변화하는 데이터는 유형입니다.

짧은 대답은 단지 선택에 대해 여러 행할 때 필드를 반환되는 포함하지 않는 잘못된 이미지 분야,즉,아무 선택*.당신의 값은 이미지 분야,그것을 검색 on a case-by-case basis.

설정 큰 값 유형의 옵션을 행해야 성능이 향상됩니다.행 크기가 상당히 작은,SQL 서버를 많이 할 수 있습니다 몇몇 물리적 읽기를 얻을 통하여 테이블이다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top