안녕하세요. 항상 궁금한 점을 해결하는데 도움주셔서 미리 감사드립니다.
다름이 아니라,
같은 프로시져로 같은 파리미터 값을 주었을때 QA과 운영서버의 차이가 너무 납니다.
OS: 2012 R2
DB : 2014 ( SP2 )
QA서버는 SAN으로 되어 있고, 운영서버는 SSD 입니다.
QA서버에서 첫번째 수행할때 42초 걸리고 두번째부터 0.4초 .. 0.8초걸리며
운영서버에서는 첫번째 수행때 1.4초 걸리며 그 뒤로는 0.3초..세번재는 0.3초 걸리네요..
맨 처음 수행한 프로시져를 다시 수행할때는 모두 빠르구요..
어떤 테이블의 데이터를 읽어올때... 디스크에서 읽냐... 메모리에서 읽냐의 차이를 보았습니다.
물론 첫번째 생기는 파라미터 값에 의하여 bad plan으로 인한 플랜이 잘못되서 인지 알았는데...
플랜이 같은 것을 확인하고는... 데이터캐싱을 의심하게 되었습니다.
테이블 'Worktable'. 검색 수 3, 논리적 읽기 수 3235, 물리적 읽기 수 0, 미리 읽기 수 18, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.
테이블 'A'. 검색 수 1557, 논리적 읽기 수 12570, 물리적 읽기 수 165, 미리 읽기 수 0, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.
테이블 'B'. 검색 수 0, 논리적 읽기 수 7785, 물리적 읽기 수 1959, 미리 읽기 수 0, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.
테이블 'C'. 검색 수 1, 논리적 읽기 수 159140, 물리적 읽기 수 0, 미리 읽기 수 0, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.
테이블 'Worktable'. 검색 수 3, 논리적 읽기 수 3192, 물리적 읽기 수 0, 미리 읽기 수 0, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.
테이블 'A'. 검색 수 1534, 논리적 읽기 수 12801, 물리적 읽기 수 0, 미리 읽기 수 0, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.
테이블 'B'. 검색 수 0, 논리적 읽기 수 7774, 물리적 읽기 수 0, 미리 읽기 수 0, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.
테이블 'C'. 검색 수 2, 논리적 읽기 수 28767, 물리적 읽기 수 1, 미리 읽기 수 20453, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.
테이블 'Workfile'. 검색 수 0, 논리적 읽기 수 0, 물리적 읽기 수 0, 미리 읽기 수 0, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.
프로시져 첫번째 수행 | |||
1번쿼리 수행 (처음) | 1번쿼리 수행 (2회) | 1번쿼리 수행 (3회) | |
QA서버 | 42486 | 462 | 482 |
운영서버 | 1492 | 323 | 319 |
다른프로시져 수행 | |||
2번쿼리 수행 (처음) | 2번쿼리 수행 (2회) | 2번쿼리 수행 (3회) | |
QA서버 | 44671 | 458 | 464 |
운영서버 | 361 | 316 | 315 |
제일처음 프로시져 다시 수행 | |||
1번쿼리 수행 (처음) | 1번쿼리 수행 (2회) | 1번쿼리 수행 (3회) | |
QA서버 | 453 | 506 | 476 |
운영서버 | 315 | 316 | 315 |
Comment 1
-
catchv
2018.05.29 16:26
SQL Server 2014는 통계쪽 문제가 있습니다.(SP1에서 패치 되었으나 flag 설정을 해줘야 동작함.)
https://support.microsoft.com/en-us/help/3044519/fix-query-performance-issues-when-new-cardinality-estimator-is-enabled
컴파일 시간을 한번 체크해 보시기 바랍니다. IO의 검색 수 등으로 봐서는 Plan의 거의 비슷할 것으로 보입니다. (C 테이블이 좀 다르네요.)
저 정도 차이로 시간 차이가 날 것 같지는 않습니다.
버퍼 캐쉬 상태 - https://www.mssqltips.com/sqlservertip/2393/determine-sql-server-memory-use-by-database-and-object/
아래의 커맨드는 운영DB에서 심각한 문제가 발생 할 수 있습니다.
미리 읽기 off - DBCC TRACEON(652, -1)
버퍼 캐쉬 삭제 - DBCC DROPCLEANBUFFERS