MS SQL Server 2014를 2016 년에 실행되는 다른 서버로 마이그레이션하기로 결정했습니다. 이제이 DB를 사용하는 PHP 응용 프로그램의 성능이 크게 떨어졌습니다 (쿼리가 1에서 뛰어 올랐습니다). 또는 2 초에서 20까지), 스키마, 구조 및 데이터면에서 DB가 동일합니다. 새로운 서버는 더 높은 CPU, 디스크 및 메모리 매개 변수를 가지며 작업 부하는 정상이므로이 성능 저하는 처음에는 의미가 없습니다. 그런 다음 Profiler를 사용하여 일부 쿼리를 분석 한 결과, Management Studio (빠른 1 ~ 3 초) 또는 응용 프로그램 프런트 엔드 (느린 15 ~ 25 초) 중 하나에서 실행될 때 쿼리 계획이 서로 다르다는 사실에 놀랐습니다. . 나는 link과 this도 찾았지만 많이 읽은 후 다른 문제를 시도한 후에는이 문제를 해결할 수 없습니다. 전에 누구도이 문제를 다루었습니까? 깊이 잠수하기 전에 확인해야 할 사항에 대한 힌트가 있습니까?MSSQL에 대한 빠른 쿼리이지만 PHP에서의 느린 쿼리
감사합니다.
============
EDIT 1
쿼리는 필터의 값에 따라, 단지 몇 개의 레코드를 반환하지만, 이상의 무언가 (10) 1000 (결코 더 왜냐하면 그것은 1000을 돌파했기 때문입니다.) 쿼리되는 주 테이블에는 1 백만 개의 레코드가 포함되며 DB의 전체 가중치는 4GB입니다. 인덱스가 성공적으로 마이그레이션 된 후 다시 작성되고 통계가 업데이트되었습니다. 내가 시도한 것들 중
편집 2
모든 DB 인덱스를 다시 모든 DB 테이블 통계를 갱신합니다. RECOMPILE도 여러 번 강제로 실행되었습니다 (Management Studio에서만). 인덱스 힌트를 사용하여 일부 인덱스를 강제로 사용했습니다 (Management Studio에서만 사용). 이들 중 어느 것도 문제를 해결하는 데 도움이되지 않았습니다. 쿼리 계획은 내 쿼리가 약 20 개의 테이블을 결합하고 여러 개의 하위 쿼리가 있기 때문에 분석하기가 매우 어렵습니다.
3 그냥 명확하게 편집은 다른 실행 계획을 생성하는 쿼리도 매개 변수와 동일합니다. 내 말은, 프로파일 러 추적이 활성화 된 상태에서 프런트 엔드에서 쿼리를 실행하면 쿼리가 캡처되고 (약 20 초 소요) 텍스트를 복사하여 관리 스튜디오에 붙여넣고 같은 쿼리를 실행하고 결과를 얻습니다. 2 초, 플러스 다른 실행 계획. 이런 종류의 문제가 여전히 매개 변수 스니핑과 관련 될 수 있습니까?
어, 데이터가 어떻게 보입니까? (수 백, 수십억입니까?), 어떻게 쿼리를 수행 했습니까? ?당신이 데이터의 톤을 검색하고 PHP에서 처리한다면, 분명히 당신의 쿼리는 무엇입니까? –
많은 행을 쿼리하는 경우 몇 초 내에 수십억 개의 행을 반환하는 ** In-Memory OLTP **를 시도해야합니다. https://channel9.msdn.com/Shows/Data-Exposed/SQL-Server-2016-In-memory-OLTP –
시도한 다른 내용은 무엇입니까? – GuidoG