이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 45345|회답: 5

[출처] Entity Framework 쿼리 최적화 WITH(NOLOCK)

[링크 복사]
게시됨 2021. 1. 6. 오후 2:52:16 | | | |
우선, 이 기사와쿼리 성능을 향상시키기 위해 WITH(NOLOCK)를 추가하는 것이 아닙니다대신, 데이터는 트랜잭션의 격리 메커니즘을 통해 읽힙니다.

SQL Server 데이터베이스에서는 동일한 데이터베이스 테이블이 자주 읽고 쓸 때 잠금 문제가 발생하는데, 이는 이전 삽입, 업데이트, 삭제 트랜잭션이 완료될 때까지 읽을 수 없고, 동시 작업과 더티 데이터를 읽기 위해 선택 작업이 완료될 때까지 기다려야 합니다.

SELECT 문과 WITH (NOLOCK)을 사용하여 블로킹 교착 상태를 해결합니다.

메모:WITH(NOLOCK)를 사용하면 더티 데이터 읽기가 발생합니다

ef는 생성된 SQL 문장을 표시합니다
https://www.itsvse.com/thread-3813-1-1.html
테스트 코드는 다음과 같습니다:

Func delegate를 사용하여 코드를 다음과 같이 패키징합니다:

결과적으로 생성된 SQL 문은 다음과 같습니다:

2021-01-06 14:32:09.9505 [스레드] DEBUG DEBUG LogCenter - sql 문: SELECT TOP (1)
    [범위1]. [ID] [ID]로서,
    [범위1]. [이름] AS [이름]
    [dbo]에서 왔습니다. [잇스브세] AS [확장1]
    여기서 ([확장1].[ 이름] = @p__linq__0) OR (([Extent1].[ 이름은 null임) 그리고 (@p__linq__0 없음))
2021-01-06 14:32:09.9515 [스레드] DEBUG DEBUG LogCenter - sql 문:

2021-01-06 14:32:09.9525 [스레드] DEBUG DEBUG LogCenter - sql 문: -- p__linq__0: 'itsvse.com' (타입 = 문자열, 크기 = 4000)

2021-01-06 14:32:09.9525 [스레드] DEBUG DEBUG LogCenter - sql 문: -- 실행 중 2021-01-06 14:32:09 +08:00

2021-01-06 14:32:09.9545 [스레드] DEBUG DEBUG LogCenter - sql 문: -- 결과: SqlDataReader로 1ms 만에 완료됨

2021-01-06 14:32:09.9555 [스레드] DEBUG DEBUG LogCenter - sql 문:

2021-01-06 14:32:09.9555 [스레드] DEBUG DEBUG LogCenter - sql 문: 2021-01-06 14:32:09 +08:00에 연결 종료
Select 쿼리에는 nolock 키워드가 포함되어 있지 않습니다.

(끝)





이전의:.NET/C#은 BlockingCollection 기반의 간단한 로깅을 구현합니다
다음:.NET (CLS) 공개 언어 명세서
 집주인| 게시됨 2021. 1. 6. 오후 2:53:17 |
사용법: Global.cs의 Application_Start()에 다음 문장을 추가하면, 생성된 SQL이 자동으로 with(nolock)로 추가됩니다.
//ef命令拦截器
DbInterception.Add(새로운 WithNoLockInterceptor());
SQL 문이 잠기야 한다면, 다음 확장을 추가하세요


1. 특수한 상황에서 인터넷에서 제공되는 정규 표현식의 오류 문제를 해결함

 집주인| 게시됨 2021. 1. 10. 오전 10:27:32 |
SQL 스크립트 테스트:

검사 결과:

기본적으로 트랜잭션이 추가되지 않으며, 기본 격리 수준도 정확합니다:



지속 시간: 17561밀리초

IsolationLevel.ReadUncommitd의 격리 수준은 다음 이미지에 나타난 것입니다:



시간: 519 ms

근원:



 집주인| 게시됨 2023. 5. 2. 오전 11:45:35 |
ADO.NET 설정은 더러운 읽기를 허용합니다읽기미, 코드는 다음과 같습니다:


다른 방법이 있는데, 멋진 코드는 다음과 같습니다:

두 가지 작문 시험 모두 문제가 없습니다.첫 번째 것을 직접 사용하는 것이 권장됩니다!!!


다른 글쓰기 방법:



 집주인| 게시됨 2025. 12. 22. 오후 1:26:15 |
Microsoft.Data.SqlClient.SqlException (0x80131904): 메모리 최적화 테이블은 트랜잭션 격리 수준 "READ UNCOMMITTED"를 지원하지 않습니다.
         at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
         at Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
         at Microsoft.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, 불리언 shouldCacheForAlwaysEncrypted)
         at Microsoft.Data.SqlClient.SqlCommand.CompleteAsyncExecuteReader(Boolean isInternal, Boolean forDescribeParameterEncryption)
         at Microsoft.Data.SqlClient.SqlCommand.InternalEndExecuteNonQuery(IAsyncResult asyncResult, Boolean isInternal, String endMethod)
         at Microsoft.Data.SqlClient.SqlCommand.EndExecuteNonQueryInternal(IAsyncResult asyncResult)
         at Microsoft.Data.SqlClient.SqlCommand.EndExecuteNonQueryAsync(IAsyncResult asyncResult)
         at System.Threading.Tasks.TaskFactory'1.FromAsyncCoreLogic(IAsyncResult iar, Func'2 endFunction, Action'1 endAction, Task'1 promise, Boolean requiresSynchronization)

SqlTransaction 및 TransactionScope 누수 격리 수준(그.)이 버그는 8년 동안 존재해 왔습니다아직까지 수리되지 않았어요! 아마도 많은 사람들이 모르는 사이에 영향을 받았을 수도 있겠죠):하이퍼링크 로그인이 보입니다.
현재 세션 격리 수준에서 SQL문을 다음과 같이 쿼리합니다:

 집주인| 게시됨 2025. 12. 23. 오전 8:53:39 |
ReadUncommitded의 BeginTransaction을 사용하면 트랜잭션 외 쿼리에서 더티 리드가 발생할 수 있습니다:하이퍼링크 로그인이 보입니다.
연결이 종료되면 트랜잭션 격리 수준은 초기화되지 않습니다:하이퍼링크 로그인이 보입니다.
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com