Chèn TempDB cụ thể của UserDB chọn kết quả trong SOS_SCHEDULER_YIELD thành ENCRYPTION_SCAN


8

Một trong những hệ thống sản xuất của chúng tôi đã thể hiện một vấn đề với một câu lệnh chèn vào bảng tạm thời từ cơ sở dữ liệu người dùng của chúng tôi. Khi tôi nhận xét về phần chèn / chọn, phần lưu trữ trong câu hỏi được chạy một cách kịp thời, vì vậy tôi tự tin vào sự cô lập của mình đối với vấn đề.

Một loạt các procs được lưu trữ được gọi về cơ bản sẽ dừng lại khi tôi bỏ bình luận về phần chèn / chọn trong câu hỏi. Tôi không thể thấy bất cứ điều gì trong Giao dịch hàng đầu theo độ tuổi trong tempdb hoặc bất kỳ cơ sở dữ liệu người dùng nào của chúng tôi. Tôi không thấy bất cứ điều gì trong Trình giám sát hoạt động lệch khỏi thông tin của Trình giám sát hoạt động khi cơ sở dữ liệu "ở trạng thái nghỉ", ngoài CPU được căn hộ ở mức ~ 20%.

Hành vi như sau: khi tôi thiết lập và sau đó thực hiện trường hợp sao chép, khi đến phần chèn / chọn trong câu hỏi, tôi thấy một SOS_SCHEDULER_YIELD và có ENCRYPTION_SCAN. Khoảng năm giờ sau, tôi sẽ thấy việc xử lý sơ yếu lý lịch được lưu trữ của chúng tôi và hoạt động sẽ hoàn tất (Tôi đặt các báo cáo nhật ký nhanh và bẩn xung quanh mỗi hoạt động riêng biệt).

Tôi cũng đã thay thế các biến trong phần chọn của phần chèn bằng các giá trị được thực thi và tự chạy truy vấn lựa chọn và nó sẽ trả về sau năm giây.

Cơ sở dữ liệu người dùng trong câu hỏi có FALSE là giá trị kích hoạt mã hóa của nó, cũng như tempdb. Hoạt động trong câu hỏi xảy ra với khoảng 65 nghìn hàng dữ liệu và tôi đã thử nó chỉ với 1k hàng và hành vi vẫn tồn tại, mặc dù thời gian cần ít hơn rất nhiều.

Một cơ sở dữ liệu người dùng là trường hợp duy nhất của hành vi này. Tôi đã sao chép nó cục bộ qua bản sao lưu của cơ sở dữ liệu người dùng đó. Chúng tôi có khoảng 70 người dùng phần mềm khác không thể hiện vấn đề này.

Với các thông tin trên, câu hỏi của tôi là, tại sao việc xử lý các thủ tục được lưu trữ của chúng tôi dừng lại? Vì có thể lạc quan để mong đợi một câu trả lời chính xác, bước chính xác để gỡ lỗi này là gì? Có lẽ có một cái gì đó trong một trong các DMV như dm_tran_locks, dm_exec numquests, dm_tran_database_transilities, dm_os_schedulers, dm_exec_sments, trong khi họ đã cung cấp cho tôi một số thông tin, trong khi họ đã cung cấp cho tôi một số thông tin.

Dưới đây là chèn / chọn trong câu hỏi:

INSERT INTO #TS_EVENT_DATA 
        (   EVENT_FK,
            EVENT_TYPE_CR_FK,
            EVENT_ENTITY_CLASS_CR_FK,
            userDatabase_ID,
            DATA_NAME_FK,               
            IMPORT_JOB_FK,              
            PRODUCT_STRUCTURE_FK,
            ORG_ENTITY_STRUCTURE_FK,
            ENTITY_CLASS_CR_FK,
            ENTITY_DATA_NAME_FK,
            ENTITY_STRUCTURE_FK,                
            DATA_SET_FK,
            DATA_TYPE_CR_FK,
            ORG_IND,
            TABLE_NAME,
            NET_VALUE1_NEW,
            NET_VALUE2_NEW,
            NET_VALUE3_NEW,
            NET_VALUE4_NEW,
            NET_VALUE5_NEW,
            NET_VALUE6_NEW,                                                     
            NET_VALUE1_CUR,
            NET_VALUE2_CUR,
            NET_VALUE3_CUR,
            NET_VALUE4_CUR,
            NET_VALUE5_CUR,
            NET_VALUE6_CUR,                         
            PERCENT_CHANGE1,
            PERCENT_CHANGE2,
            PERCENT_CHANGE3,
            PERCENT_CHANGE4,
            PERCENT_CHANGE5,
            PERCENT_CHANGE6,                            
            VALUE_UOM_CODE_FK,
            ASSOC_UOM_CODE_FK,
            VALUES_SHEET_NAME,
            UOM_CONVERSION_FACTOR,
            END_DATE_CUR,                           
            END_DATE_NEW,   
            EFFECTIVE_DATE_CUR,                                     
            EVENT_EFFECTIVE_DATE,
            EVENT_ACTION_CR_FK,
            EVENT_STATUS_CR_FK, 
            EVENT_CONDITION_CR_FK,
            EVENT_SOURCE_CR_FK,
            EVENT_PRIORITY_CR_FK,
            RESULT_TYPE_CR_FK,
            TABLE_ID_FK,
            BATCH_NO,
            IMPORT_BATCH_NO,
            RULES_FK,
            RECORD_STATUS_CR_FK,                
            UPDATE_TIMESTAMP
             )  
   SELECT
            A.EVENT_ID,                    
            A.EVENT_TYPE_CR_FK,
            A.EVENT_ENTITY_CLASS_CR_FK,
            A.userDatabase_ID,
            A.DATA_NAME_FK,             
            A.IMPORT_JOB_FK,
            A.PRODUCT_STRUCTURE_FK,
            A.ORG_ENTITY_STRUCTURE_FK,
            A.ENTITY_CLASS_CR_FK,
            A.ENTITY_DATA_NAME_FK,
            A.ENTITY_STRUCTURE_FK,
            A.DATA_SET_FK,
            A.DATA_TYPE_CR_FK,
            A.ORG_IND,
            A.TABLE_NAME,
            A.NET_VALUE1_NEW,
            A.NET_VALUE2_NEW,
            A.NET_VALUE3_NEW,
            A.NET_VALUE4_NEW,
            A.NET_VALUE5_NEW,
            A.NET_VALUE6_NEW,                                                   
            A.NET_VALUE1,  
            A.NET_VALUE2,
            A.NET_VALUE3,
            A.NET_VALUE4,
            A.NET_VALUE5,
            A.NET_VALUE6,                       
            CASE ISNULL (A.NET_VALUE1, 0 )
             WHEN 0 THEN 0  
             ELSE ( ( A.NET_VALUE1_NEW  - A.NET_VALUE1) / A.NET_VALUE1 )
             END,
            CASE ISNULL (A.NET_VALUE2, 0 )
             WHEN 0 THEN 0  
             ELSE ( ( A.NET_VALUE2_NEW  - A.NET_VALUE2 ) / A.NET_VALUE2 )
             END,
            CASE ISNULL (A.NET_VALUE3, 0 )
             WHEN 0 THEN 0  
             ELSE ( ( A.NET_VALUE3_NEW  - A.NET_VALUE3 ) / A.NET_VALUE3 )
             END,
            CASE ISNULL (A.NET_VALUE4, 0 )
             WHEN 0 THEN 0  
             ELSE ( ( A.NET_VALUE4_NEW  - A.NET_VALUE4 ) / A.NET_VALUE4 )
             END,
            CASE ISNULL (A.NET_VALUE5, 0 )
             WHEN 0 THEN 0  
             ELSE ( ( A.NET_VALUE5_NEW  - A.NET_VALUE5 ) / A.NET_VALUE5 )
             END,
            CASE ISNULL (A.NET_VALUE6, 0 )
             WHEN 0 THEN 0  
             ELSE ( ( A.NET_VALUE6_NEW  - A.NET_VALUE6 ) / A.NET_VALUE6 )
             END,
        A.VALUE_UOM_CODE_FK,
        A.ASSOC_UOM_CODE_FK,
        A.VALUES_SHEET_NAME,
        ( SELECT CASE ISNULL ( A.VALUE_UOM_CODE_FK, 0 ) 
        WHEN 0 THEN 1
        ELSE
        CASE ISNULL ( A.ASSOC_UOM_CODE_FK, 0 ) 
        WHEN 0 THEN 1
        ELSE
        ( ISNULL (
        ( SELECT 
        ( SELECT ISNULL (
           (SELECT uc.primary_qty
            FROM userDatabase.UOM_CODE uc WITH (NOLOCK)
            WHERE uc.UOM_CODE_ID = A.VALUE_UOM_CODE_FK  ), 1 )
        )
        /
        ISNULL (   (SELECT uc.primary_qty
                    FROM userDatabase.UOM_CODE uc WITH (NOLOCK)
                    WHERE uc.UOM_CODE_ID = A.ASSOC_UOM_CODE_FK )
                 , ISNULL ( (SELECT uc.primary_qty
                             FROM userDatabase.UOM_CODE uc WITH (NOLOCK)
                             WHERE uc.UOM_CODE_ID = A.VALUE_UOM_CODE_FK) , 1 ) 
                 )
        ) , 1 ) )
        END END
        )  AS UOM_CONVERSION_FACTOR,
            A.END_DATE,
            A.END_DATE_NEW, 
            A.EFFECTIVE_DATE,                                       
            A.EVENT_EFFECTIVE_DATE,
            A.EVENT_ACTION_CR_FK,
            A.EVENT_STATUS_CR_FK,   
            A.EVENT_CONDITION_CR_FK,
            A.EVENT_SOURCE_CR_FK,
            A.EVENT_PRIORITY_CR_FK,
            A.RESULT_TYPE_CR_FK,
            A.SHEET_RESULTS_ID,
            A.BATCH_NO,
            A.IMPORT_BATCH_NO,
            A.RULES_FK,
            A.RECORD_STATUS_CR_FK,              
            @L_SYSDATE

FROM ( SELECT
            ED.EVENT_ID,                    
            DS.EVENT_TYPE_CR_FK,
            DS.ENTITY_CLASS_CR_FK AS EVENT_ENTITY_CLASS_CR_FK,
            ED.PRODUCT_STRUCTURE_FK AS userDatabase_ID,
            ED.DATA_NAME_FK,
            ED.IMPORT_JOB_FK,           
            ED.PRODUCT_STRUCTURE_FK,
            CASE ISNULL ( DS.ORG_IND, 0 )
            WHEN 0 THEN ISNULL ( ED.ORG_ENTITY_STRUCTURE_FK, 1 )
            ELSE ED.ORG_ENTITY_STRUCTURE_FK         
            END AS ORG_ENTITY_STRUCTURE_FK,
            DS.ENTITY_STRUCTURE_EC_CR_FK AS ENTITY_CLASS_CR_FK,
            DN.ENTITY_DATA_NAME_FK,
            ED.ENTITY_STRUCTURE_FK,                                                                                 
            DN.DATA_SET_FK,
            DS.DATA_TYPE_CR_FK,
            DS.ORG_IND,
            DS.TABLE_NAME,
            ED.NET_VALUE1_NEW,
            ED.NET_VALUE2_NEW,
            ED.NET_VALUE3_NEW,
            ED.NET_VALUE4_NEW,
            ED.NET_VALUE5_NEW,
            ED.NET_VALUE6_NEW,                                                      
            SR.NET_VALUE1,
            SR.NET_VALUE2,
            SR.NET_VALUE3,
            SR.NET_VALUE4,
            SR.NET_VALUE5,
            SR.NET_VALUE6,  
        ED.VALUE_UOM_CODE_FK,               
        ( SELECT TOP 1 PUC.UOM_CODE_FK
          FROM userDatabase.PRODUCT_UOM_CLASS PUC WITH (NOLOCK)
          WHERE ( PUC.DATA_NAME_FK = DN.UOM_CLASS_DATA_NAME_FK
          AND     PUC.PRODUCT_STRUCTURE_FK = ED.PRODUCT_STRUCTURE_FK
          AND   (  (   DS.ORG_IND = 1
                   AND PUC.ORG_ENTITY_STRUCTURE_FK = ED.ORG_ENTITY_STRUCTURE_FK )
                  OR PUC.ORG_ENTITY_STRUCTURE_FK = 1 ) 
          AND ISNULL ( PUC.ENTITY_STRUCTURE_FK, -999 ) = ISNULL ( ED.ENTITY_STRUCTURE_FK, -999 )   )
        ) AS ASSOC_UOM_CODE_FK,
        ED.VALUES_SHEET_NAME,
            SR.END_DATE,
            ED.END_DATE_NEW,
            SR.EFFECTIVE_DATE,              
            ED.EVENT_EFFECTIVE_DATE, 
            CASE WHEN ED.EVENT_ACTION_CR_FK = 59
            THEN 59
            ELSE
            CASE WHEN SR.SHEET_RESULTS_ID IS NULL
            THEN 51
            ELSE 52
            END
            END  AS EVENT_ACTION_CR_FK,
            ED.EVENT_STATUS_CR_FK,  
            ED.EVENT_CONDITION_CR_FK,
            ED.EVENT_SOURCE_CR_FK,
            ED.EVENT_PRIORITY_CR_FK,
            ISNULL ( ED.RESULT_TYPE_CR_FK, 711 ) AS RESULT_TYPE_CR_FK,                  
            SR.SHEET_RESULTS_ID,
            ED.BATCH_NO,
            ED.IMPORT_BATCH_NO,
            ED.RULES_FK,
            ED.RECORD_STATUS_CR_FK          
 FROM SYNCHRONIZER.EVENT_DATA ED WITH (NOLOCK)
    INNER JOIN userDatabase.DATA_NAME DN WITH (NOLOCK)
     ON ( DN.DATA_NAME_ID = ED.DATA_NAME_FK )
    INNER JOIN userDatabase.DATA_SET DS WITH (NOLOCK)
     ON ( DS.DATA_SET_ID = DN.DATA_SET_FK )
    LEFT JOIN marginmgr.SHEET_RESULTS SR WITH (NOLOCK)
     ON ( SR.DATA_NAME_FK = ED.DATA_NAME_FK
     AND  ISNULL ( SR.PRODUCT_STRUCTURE_FK, 0 ) = ISNULL ( ED.PRODUCT_STRUCTURE_FK, 0 )
     AND  ISNULL ( SR.ORG_ENTITY_STRUCTURE_FK, 0 ) = ISNULL ( ED.ORG_ENTITY_STRUCTURE_FK, 1 )
     AND  ISNULL ( SR.ENTITY_STRUCTURE_FK, 0 ) = ISNULL ( ED.ENTITY_STRUCTURE_FK, 0 )  
    )                                                    
    WHERE 1 = 1 
    AND  EVENT_STATUS_CR_FK = 88        
    AND (   
           (    ISNULL ( @in_event_fk, -999 ) = -999
            AND ISNULL ( ED.BATCH_NO, -999 ) = ISNULL ( @in_batch_no, -999 )
            AND ISNULL ( ED.import_job_fk, -999 ) = ISNULL (@in_import_job_fk, -999 )
            AND isnull ( ED.event_priority_cr_fk, -999 ) = isnull (@in_event_priority_cr_fk, -999)
            AND ISNULL ( ds.table_name, 'NULL DATA' )  = ISNULL ( @in_table_name, 'NULL DATA' ) )
        OR  ED.EVENT_ID = ISNULL (@in_event_fk, -999 ) 
        )
    AND   (   @in_data_name_fk = -999           
          OR  ED.data_name_fk = @in_data_name_fk )          
) A 

Kết quả của sp_cool:

access check cache bucket count 0   65536   0   0
access check cache quota    0   2147483647  0   0
Ad Hoc Distributed Queries  0   1   0   0
affinity I/O mask   -2147483648 2147483647  0   0
affinity mask   -2147483648 2147483647  0   0
affinity64 I/O mask -2147483648 2147483647  0   0
affinity64 mask -2147483648 2147483647  0   0
Agent XPs   0   1   1   1
allow updates   0   1   0   0
backup compression default  0   1   0   0
blocked process threshold (s)   0   86400   0   0
c2 audit mode   0   1   0   0
clr enabled 0   1   1   1
common criteria compliance enabled  0   1   0   0
contained database authentication   0   1   0   0
cost threshold for parallelism  0   32767   5   5
cross db ownership chaining 0   1   0   0
cursor threshold    -1  2147483647  -1  -1
Database Mail XPs   0   1   1   1
default full-text language  0   2147483647  1033    1033
default language    0   9999    0   0
default trace enabled   0   1   1   1
disallow results from triggers  0   1   0   0
EKM provider enabled    0   1   0   0
filestream access level 0   2   0   0
fill factor (%) 0   100 0   0
ft crawl bandwidth (max)    0   32767   100 100
ft crawl bandwidth (min)    0   32767   0   0
ft notify bandwidth (max)   0   32767   100 100
ft notify bandwidth (min)   0   32767   0   0
index create memory (KB)    704 2147483647  0   0
in-doubt xact resolution    0   2   0   0
lightweight pooling 0   1   0   0
locks   5000    2147483647  0   0
max degree of parallelism   0   32767   0   0
max full-text crawl range   0   256 4   4
max server memory (MB)  128 2147483647  5120    5120
max text repl size (B)  -1  2147483647  65536   65536
max worker threads  128 65535   0   0
media retention 0   365 0   0
min memory per query (KB)   512 2147483647  1024    1024
min server memory (MB)  0   2147483647  128 128
nested triggers 0   1   1   1
network packet size (B) 512 32767   4096    4096
Ole Automation Procedures   0   1   0   0
open objects    0   2147483647  0   0
optimize for ad hoc workloads   0   1   0   0
PH timeout (s)  1   3600    60  60
precompute rank 0   1   0   0
priority boost  0   1   0   0
query governor cost limit   0   2147483647  0   0
query wait (s)  -1  2147483647  -1  -1
recovery interval (min) 0   32767   0   0
remote access   0   1   1   1
remote admin connections    0   1   0   0
remote login timeout (s)    0   2147483647  10  10
remote proc trans   0   1   0   0
remote query timeout (s)    0   2147483647  600 600
Replication XPs 0   1   0   0
scan for startup procs  0   1   0   0
server trigger recursion    0   1   1   1
set working set size    0   1   0   0
show advanced options   0   1   1   1
SMO and DMO XPs 0   1   1   1
transform noise words   0   1   0   0
two digit year cutoff   1753    9999    2049    2049
user connections    0   32767   0   0
user options    0   32767   0   0
xp_cmdshell 0   1   1   1

Liên kết với XML của Exec Plan (quá lớn để nhúng).


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
Paul White 9

Câu trả lời:


5

Bạn sẽ không chỉ thấy tài nguyên ENCRYPTION_SCAN trong danh sách chờ của mình khi Mã hóa (như TDE) được sử dụng.

Một số hoạt động sẽ thực hiện khóa chia sẻ trên tài nguyên này để đảm bảo cơ sở dữ liệu không bị mã hóa trong quá trình hoạt động.

Thời điểm bạn sẽ mã hóa cơ sở dữ liệu người dùng bằng TDE, tempdb cũng sẽ được mã hóa (nếu không, bạn sẽ gặp rủi ro bảo mật khi dữ liệu Người dùng được sử dụng trong db temp).

Do đó, một số thao tác sẽ thực hiện khóa chia sẻ trên ENCRYPTION_SCAN trong Tempdb để ngăn Tempdb được mã hóa.

Đây là hai ví dụ:

SỐ LƯỢNG LỚN

IF object_id('tempdb..##NumberCreation') IS NOT NULL
    drop table ##NumberCreation
GO

--create temp table to hold numbers
create table ##NumberCreation (C int NOT NULL);
GO

-- CREATE Numbers by using trick from Itzik -> http://sqlmag.com/sql-server/virtual-auxiliary-table-numbers 
WITH L1 AS ( SELECT 1 as C UNION SELECT 0 ),
    L2 AS ( SELECT 1 as C FROM L1 CROSS JOIN L1 as B ),
    L3 AS ( SELECT 1 as C FROM L2 CROSS JOIN L2 as B ),
    L4 AS ( SELECT 1 as C FROM L3 CROSS JOIN L3 as B ),
    L5 AS ( SELECT 1 as C FROM L4 CROSS JOIN L4 as B ),
    L6 AS ( SELECT 1 as C FROM L5 CROSS JOIN L5 as B),
    Nums as (SELECT ROW_NUMBER() OVER (ORDER BY C) as C FROM L6) 
insert ##NumberCreation(C)
SELECT TOP 500000 C
FROM Nums

Đoạn mã trên sẽ tạo ra 500k bản ghi trong bảng tạm thời toàn cầu, bạn có thể xuất chúng bằng các lệnh sau. Nếu bạn chạy nó từ SSMS, hãy đảm bảo bạn đang ở chế độ SQLCMD:

--Export
!!bcp ##NumberCreation out "E:\SQLServer\Backup\test\export.dat" -T -n

--format file
!!bcp ##NumberCreation format nul -T -n  -f "E:\SQLServer\Backup\test\export.fmt"

Đảm bảo chọn thư mục có tài khoản dịch vụ SQL Server có quyền ghi và nếu bạn chạy thư mục này từ SSMS, hãy chạy cục bộ trên SQL Server.

Điều tiếp theo là bắt đầu một vòng lặp chèn số lượng lớn. Trong khi vòng lặp đang chạy, hãy mở màn hình thứ hai và bắt đầu chạy sp_lock cho đến khi bạn thấy khóa chia sẻ ENCRYPTION_SCAN trong DB_ID 2 (Đó là Tempdb).

Vòng lặp nhập số lượng lớn:

BEGIN
    IF OBJECT_ID('tempdb..#Import') IS NOT NULL
        DROP TABLE #Import ;

    CREATE TABLE #Import (C INT) ;
    BULK INSERT #Import
    FROM 'E:\SQLServer\Backup\test\export.dat' WITH (FORMATFILE='E:\SQLServer\Backup\test\export.fmt', FIRSTROW=1, TABLOCK) ;
END
GO 500 --run it 500 times

Xem kết quả của sp_lock trong cửa sổ thứ hai:

nhập mô tả hình ảnh ở đây

Xếp hạng trong TEMPDB

Với cùng một bảng Temp tại chỗ, bắt đầu vòng lặp rất đơn giản này:

SELECT * from #Import order by C
go 50

Nó sẽ tạo ra kế hoạch Thi hành sau:

nhập mô tả hình ảnh ở đây

(Đảm bảo rằng #Import thực sự được điền, vì tùy thuộc vào thời điểm bạn dừng vòng lặp nhập hàng loạt trước đó, nó có thể trống!)

Một lần nữa, hãy chạy sp_lock trong cửa sổ thứ hai cho đến khi bạn thấy Tài nguyên ENCRYPTION_SCAN bật lên:

nhập mô tả hình ảnh ở đây

Bây giờ bạn biết, tại sao chờ đợi tài nguyên này được hiển thị. Nó có thể rất tốt rằng đây không phải là vấn đề của bạn. Tôi chỉ muốn chỉ ra những lý do khác khiến ENCRYPTION_SCAN xuất hiện. Lý do cho sự chậm lại truy vấn của bạn có thể là một cái gì đó khác. Tôi sẽ để cải thiện kế hoạch truy vấn của bạn cho các chuyên gia kế hoạch truy vấn trên trang web này ;-) Tuy nhiên, bạn có thể đăng kế hoạch thực hiện thực tế thay vì chỉ kế hoạch ước tính không?


Vì vậy, ENCRYPTION_SCANmột chút cá trích đỏ sau đó. Nó là một Skhóa. Vì vậy, lý thuyết là trong khoảng thời gian 5 giờ mà OP thấy ENCRYPTION_SCAN nó thực tế chỉ bận thực hiện thao tác chèn. Không bị chặn bởi nó?
Martin Smith

Vâng, tôi sẽ nghĩ như vậy. Có thể là tốt để xem chờ đợi cummined cho spid đó trong quá trình chạy, sử dụng các sự kiện mở rộng? Để xác nhận rằng người dùng trong thực tế đang chờ đợi điều gì khác? Điều gây phiền toái cho tôi là "Một cơ sở dữ liệu người dùng là trường hợp duy nhất của hành vi này ....... 70 người dùng khác của phần mềm không thể hiện vấn đề này." Nó có thể là một kế hoạch xấu? (Tôi không thấy bất kỳ tham số nào trong phần truy vấn này) Chúng tôi sẽ cần kế hoạch thực tế ..
Edward tổng hợp

@EdwardDortland Tôi sẽ cố gắng để có được kế hoạch truy vấn thực tế được đăng. Re: Martin Smith, tôi vẫn bối rối tại sao tôi sẽ không thấy chèn vào các giao dịch hàng đầu theo báo cáo tuổi cho tempdb hoặc cơ sở dữ liệu người dùng của chúng tôi, mặc dù cá trích đỏ sẽ mô tả điều đó. Trong cơ sở dữ liệu sao chép, tôi đã viết lại mệnh đề where để sử dụng hoặc các câu lệnh thay vì không rõ ràng và trong thử nghiệm cho đến nay (+ được triển khai vào đầu tuần trước), phần chèn sẽ chạy trong vài phút mà không có ENCRYPTION_SCAN.
Robert Gannon

@RobertGannon sẽ rất tuyệt khi thấy sự khác biệt giữa kế hoạch thực tế của truy vấn ban đầu và truy vấn được thực hiện lại.
Edward tổng hợp

2
Một bài đăng blog gần đây có liên quan xác nhận tất cả thông tin ở đây blog.msdn.microsoft.com/psssql/2016/04/19/ mẹo
Martin Smith
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.