Database Engine Tuning Advisor을 사용하여 데이터베이스를 현재 최적화하려고하고 있는데 직면 한 문제는 sp_executesql
을 사용하여 수행 한 수많은 SQL 쿼리를 보여주는 것입니다. . LINQ-to-Entities가 직접 문을 호출하도록하는 방법이 있는지 궁금해합니다.LINQ-to-Entities가 sp_executesql을 제거합니다.
답변
아담과 동의하십시오. 엔티티 프레임 워크/ADO.net에서 sp_executesql
을 사용하는 것은 의도적입니다. 그런 다음 쿼리는 매개 변수화 된 저장 프로 시저와 유사하게 실행되고 SQL 최적화 프로그램은 쿼리 계획을 다시 사용할 수 있습니다.
DB를 조정하려는 경우 이러한 쿼리도 고려해야합니다. 난 당신의 DB를 백업 받아 (SQL 프로파일 러에서) 재생 추적 템플릿을 사용하여 쿼리를 캡처, 귀하의 DB를 복원, 튜닝 어드바이저 설정을 실행이 추적에 작업을 수행
sp_executesql
의 사용법은 ADO.NET 효과이며 Entity Framework와 관련이 없습니다. 내가 아는 한, 저장 프로 시저를 사용하지 않도록 지시 할 방법이 없습니다.
그것은 단지 어떻게의 유물입니다 RPC 호출은 프로파일 러에 표시됩니다. 클라이언트 요청에는 두 가지 주요 유형이 있습니다. Free TDS protocol documentation에 설명되어있는 언어 (유형 0x01)와 RPC (유형 0x03)입니다. 호출이 매개 변수가있는 SQL 일괄 처리 일 경우 RPC 호출은 sp_executesql
의 바로 가기 인 길이 0x0A의 0x03 유형이됩니다.
클라이언트가 이면 클라이언트가 일 때 매개 변수가 포함 된 일괄 처리를 제출하면 sp_executesql
이 호출되는 것처럼 보입니다. 이것은 OleDB, SqlClient, Sql Native Client가있는 ODBC에서 마찬가지입니다. 클라이언트입니다. 실제로 Entity Framework 나 ADO.Net은 실제로 sp_executesql을 호출하지 않습니다 (사실 요청이 호출 된 것처럼 실행되지만 실제로는 프로 시저가 호출되지 않습니다 ... 복잡합니다 ...). 요청에 @parameter
을 추가 할 때마다 발생하는 프로토콜의 아티팩트입니다.
설명 주셔서 감사합니다 - 그것은 꽤 많은 것들을 명확히합니다 .. 지금 나는 무슨 일이 일어나고 있는지 이해합니다! –
LINQ/.NET은 sp_executesql
SQL 서버 호출로 SQL 쿼리를 실행합니다. 그러나 데이터베이스 엔진 튜닝 관리자은 캡처 한 문을 SQL Server 프로파일 러로 파싱 할 수 없으므로 튜닝 세션의 결과가 좋지 않습니다.
sp_executesql
문을 데이터베이스 엔진 튜닝 관리자에게 제공하기 전에 문을 열어서 올바르게 분석 할 수 있습니다.
- 는 사용자가 실행 한 후 저장 파일> 내보내기> 추출 SQL 서버 이벤트> 추출 거래-SQL 이벤트 ...를 사용하여 프로파일SQL Server의 튜닝 세션 (또는 기존 오픈). 모든 SQL 문을 포함하는 SQL 파일.
- 열고 .SQL 파일 (의 예를 들어 메모장 ++ 6-http://notepad-plus-plus.org/)와 다음은 & 교체를 일반 TSQL 모든
sp_executesql
문을 언 박싱하는 정규 표현식을 찾아 실행합니다. 찾기 :^EXEC[\s]+SP_EXECUTESQL[\s]+[N]*'((''|[^'])*)'[\s]*,[\s]*[N]*'((''|[^'])*)'[\s]*,[\s]*([^\n]+)$
바꾸기 :BEGIN\nDECLARE \3\nSELECT \5\n\1\nEND
- 다음의 '언 박싱'.SQL은 우리가 추가 neeed 어떤 인덱스를 찾아 데이터베이스 엔진 튜닝 관리자에 건설 한 것을 제출하십시오.
해피 튜닝! Notepad ++ 6 (또는 그 이상)을 선택한 이유는 정규 표현식 구현이 매우 잘되어 있기 때문입니다. 위의 표현식을 실행할 때 다른 텍스트 편집기가 실패 할 수 있습니다.
왜 당신은 정상에 있지 않습니까? 이 간단한 찾기 및 바꾸기가 실제로 트릭을 수행했습니다. EF는 모든 프로 시저 호출에 대해 동일한 변수 이름을 사용합니다. 하지만 이건 정말 도움이 됐어. 고마워! – Giri
- 1. LinqToEntities가 엔티티의 하위 객체를 검색하지 않습니다.
- 2. sp_executesql을 사용하여 스크립팅 SP에서 SSMS를 중지 하시겠습니까?
- 3. 저장 프로 시저에서 sp_executesql을 사용하는 올바른 방법입니까?
- 4. params와 함께 sp_executesql을 사용하면 변수를 선언해야한다고 불평합니다.
- 5. 하위보기에서보기를 제거합니다.
- 6. "프로 시저가 'ntext/nchar/nvarchar'유형의 '@statement'매개 변수를 필요로하는 이유는 무엇입니까?" 언제 sp_executesql을 사용하려고합니까? 내가 sp_executesql을 사용하려고 할 때
- 7. preg_replace는 비 인쇄 문자를 제거합니다. 외래 문자도 모두 제거합니다.
- 8. jQuery를 사용하여 divs를 제거합니다.
- 9. strpos가 text/html을 제거합니다.
- 10. Grit은 커밋에서 파일을 제거합니다.
- 11. jsTree가 URL에서 해시를 제거합니다.
- 12. URL의 문자열에서 문자를 제거합니다.
- 13. ActiveRecord :: Relation에서 'where'절을 제거합니다.
- 14. PHP 문자열이 공백을 제거합니다
- 15. 스크롤을 페이지에서 제거합니다.
- 16. class jquery를 제거합니다.
- 17. 배열에서 항목을 제거합니다.
- 18. TinyMCE는 이중 슬래시를 제거합니다.
- 19. jQuery 열과 행을 제거합니다.
- 20. NSNumberFormatter가 후행 0을 제거합니다.
- 21. 개체의 한 속성을 제거합니다.
- 22. 월간 총계에서 바이어스를 제거합니다.
- 23. RPM 업그레이드로 RPM을 제거합니다
- 24. PHP Tidy가 태그를 제거합니다.
- 25. 파일에서 행을 제거합니다.
- 26. 중복 코드를 찾아서 제거합니다
- 27. jQuery IE6에서 XML을 제거합니다.
- 28. MySQL Int는 0을 제거합니다
- 29. 지도에서 오버레이를 제거합니다.
- 30. ColorTransform이 그림자를 제거합니다.
감사합니다.이 방법을 사용해보세요. –