2009-12-01 5 views
1

그룹 아직 SQL을 배우고 있는데 새로운 문제가 있습니다. 초기 실행/연결 속도가 느린 몇 가지 저장 프로 시저가 있습니다. 예를 들어, 응용 프로그램에서 제품 가격을 조회하는 데 사용하는 저장 프로 시저 (sp)가 있습니다. 아침에 sp를 처음 실행하면 20-40 초가 걸릴 수 있습니다. 그 후에는 1-2 초 밖에 걸리지 않습니다 ... 우리는 또한 sp (s)가 사용하는 테이블에 대해 매일 업데이트를 실행하고 업데이트가 완료되면 캐시가 지워지고 다시 처음 실행될 때까지 20-40 초가 걸릴 것입니다. -2 초 후에.초기 실행시 저장 프로 시저가 느림

이 문제가 발생합니까? 확실하지 않으면 매일 업데이 트에 뭔가를 추가해야합니다 업데이트 후 내 sp를 (지저분해질 수있는) 또는 화재가 발생할 수있는 캐시를 지우지 알려주 내 SP에 뭔가를 추가 할 수 있습니다. 나는 무엇을 해야할지 모르겠다. 모든 것은 초기 실행 후에 훌륭하게 작동한다 ...

어떤 제안이라도 대단히 감사하겠습니다.

+1

어떤 데이터베이스를 사용하고 있습니까? –

답변

2

속도 차이가 나는 이유는 캐싱 때문입니다. 일단 SProc을 실행하면 실행 계획이 캐시로 들어가고 훨씬 빨라집니다. 우리가 환경에서했던 것은 7:30 am 경에 예정된 작업으로 더 많은 사용 된 SProcs를 실행하여 근무일을 시작할 때 사용자를 위해 8am까지 "예열"될 수 있도록하는 것이 었습니다.

1

두 가지 이유가있을 수 있습니다.

  1. 첫 번째로 저장된 모든 proc 파일을 처음 컴파일 할 때 컴파일해야하며 시간이 오래 걸립니다. 컴파일 된 계획은 (공급 업체에 따라) 캐시되므로 후속 실행은이를 다시 컴파일하지 않아도됩니다. 나중에라도 실행되지 않은 경우 캐시의 컴파일 된 계획이 덮어 써서 다시 컴파일해야 할 수 있습니다.

  2. 두 번째로 (다른 공급 업체의 경우) 쿼리를 실행하면 쿼리를 실행하는 데 필요한 데이터 페이지가 읽혀집니다. 그러나 쿼리 프로세서는이를 캐시에서 "읽습니다". 캐시에없는 데이터 페이지에서만 프로세서가 디스크로 이동합니다. 따라서 처음으로 데이터에 대한 시간이 필요하기 때문에 일반적으로 데이터를 디스크에 저장해야하지만 같은 데이터 페이지가 필요한 후속 실행에서는 메모리 내 캐시에서 가져옵니다. 디스크 I/O가 RAM I/O보다 훨씬 느리기 때문에 쿼리 실행 시간에 큰 차이가 발생할 수 있습니다.

관련 문제