Làm th? nào đ? kh?c ph?c hi?u su?t c?a các qu?ng cáo-Hoc truy v?n trong SQL Server

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 243588 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

? Trang này

TÓM T?T

Bài vi?t này mô t? làm th? nào đ? kh?c ph?c s? ch?m hi?u su?t c?a nhi?u đ?ng th?i qu?ng cáo-hoc truy v?n trong Microsoft SQL Server. N?u b?n đ? không xác đ?nh các ngu?n g?c chính xác c?a v?n đ? c?a b?n, xem các bài vi?t sau đây trong Microsoft Kho tàng ki?n th?c trư?c khi b?n ti?p t?c:
224587 Làm th? nào đ? g? r?i ?ng d?ng hi?u su?t v?i SQL Server

Bài vi?t này gi? đ?nh r?ng b?n đ? s? d?ng KB 224587 đ? thu h?p ph?m vi c?a v?n đ? và r?ng b?n đ? n?m b?t m?t giám sát hi?u su?t Windows NT log và SQL Profiler theo d?i chi ti?t r?ng các các c? th? qu?y, s? ki?n, và d? li?u c?t.

Đ?c đi?m v? các v?n đ? hi?u su?t

Các v?n đ? hi?u su?t có đ?c đi?m như sau:
  • Truy v?n ng?n qu?ng cáo-hoc thư?ng có m?t r?t ng?n k?t qu? th?i gian ch?m t?ng th? h? th?ng t?c khi m?t s? lư?ng đ?ng th?i ngư?i dùng ch?y các truy v?n.
  • R?t cao ho?c 100 ph?n trăm CPU s? d?ng.
  • Không có liên k?t ch?n trong các th?i k? ch?m hi?u su?t.

    B?n có th? nhanh chóng t?m ch?n b?ng cách ki?m tra các BLK c?t ? đ?u ra c?a các sp_who h? th?ng lưu tr? th? t?c. Nếu BLK c?t không ph?i là 0 đ?i v?i m?t s? h? th?ng quá tr?nh ID (SPID), có đang c?n tr?.
  • Trong m?t s? trư?ng h?p, b? nh? máy ch? nh?n m?nh, và b?n có th? nh?n đư?c l?i tương t? như các l?i sau đây:
    L?i: 701, m?c đ? nghiêm tr?ng: 17, bang: 1
    Đó là không đ? b? nh? h? th?ng đ? ch?y truy v?n này.
    - hay -
    Msg 8645 ngư?i, M?c đ? 17, bang 1, th? t?c, d?ng 1
    M?t th?i gian ra đ? x?y ra trong khi ch? đ?i cho b? nh? ngu?n l?c đ? th?c hi?n truy v?n. Tái ch?y truy v?n.

C?i ti?n trong truy v?n biên d?ch

V? c?a c?i ti?n trong h? th?ng ki?n trúc b?t đ?u trong SQL Server 7.0, c? th? là t?i ưu hóa truy v?n, b?n có th? nh?n th?y m?t s? khác bi?t trong h? th?ng tài nguyên s? d?ng b?i ?ng d?ng so v?i phiên b?n trư?c c?a SQL H? ph?c v?. C? th?, SQL Server 7.0 có th? hi?n th? tăng trong c? hai CPU hay s? d?ng b? nh?, nhưng các phiên b?n trư?c đó c?a SQL Server là đ?a IO ràng bu?c. Nh?ng thay đ?i này có th? đư?c truy t?m đ?n hai y?u t?:
  • Tham gia băm và merge
  • Truy v?n biên so?n l?n
Phiên b?n trư?c c?a SQL Server d?a hoàn toàn vào v?ng l?p l?ng nhau l?p đi l?p l?i đ? th?c hi?n tham gia. Tham gia l?ng nhau v?ng v?n đ? s? d?ng đ?a IO. B?t đ?u v?i SQL Server 7.0, băm và merge tham gia đư?c gi?i thi?u. Tham gia băm và merge làm nhi?u hơn n?a trong b? nh? ch? bi?n hơn tham gia l?ng nhau v?ng l?p. K?t qu? h?p l? Đi?u này là r?ng CPU và s? d?ng b? nh? cao khi các k? thu?t này tham gia là đư?c s? d?ng. Đ? bi?t thêm chi ti?t v? tham gia băm và merge, xem s? "hi?u bi?t Hash tham gia"và"S? hi?u bi?t h?p nh?t tham gia"các ch? đ? trong SQL Server 7.0 sách Tr?c tuy?n.

Truy v?n biên so?n l?n b? ?nh hư?ng b?i v? các truy v?n tôi ưu hoa có nhi?u tùy ch?n và thông tin có s?n hơn trong phiên b?n trư?c SQL Server, bao g?m c? m?i băm và h?p nh?t tham gia k? thu?t, c?i thi?n t?m ki?m các thu?t toán, và c?t th?ng kê. Thông tin b? sung này cho phép các truy v?n c? tôi ưu hoa đ? ch?n phương pháp hi?u qu? nh?t đ? l?y d? li?u truy v?n. Tuy nhiên, phân tích và xem xét các k? thu?t m?i và thông tin đ?i h?i th?i gian x? l?. Này s? d?ng CPU tăng có th? d?n đ?n truy v?n tr?nh biên d?ch l?n đư?c dài hơn trong phiên b?n trư?c c?a SQL Server.

Đ?i v?i h?u h?t các truy v?n, s? gia tăng này trong th?i gian biên d?ch bù đ?p b?i m?t gi?m trong th?i gian th?c hi?n. Các hi?u ?ng t?ng th? là truy v?n ch?y nhanh hơn hơn trong phiên b?n trư?c c?a SQL Server. M?t ngo?i l?, tuy nhiên, x?y ra v?i r?t nh?, đơn gi?n, OLTP-lo?i queries có r?t th?p th?c hi?n l?n. Cho các truy v?n này, quá tr?nh t?o ra m?t k? ho?ch truy v?n có th? có m?t b?ng ho?c l?n hơn chi phí hơn so v?i th?c hi?n truy v?n. Do đó, các truy v?n có th? th?c hi?n hơi ch?m hơn so v?i các phiên b?n trư?c đó c?a SQL Server. B?i v? s? khác bi?t là thư?ng trong mili giây, các hi?u ?ng này không nh?n th?y đ?i v?i m?t đ?c bi?t truy v?n n?u nó đư?c th?c thi cá nhân. Tuy nhiên, b?n có th? nh?n th?y r?ng t?ng th? h? th?ng s? d?ng CPU là cao hơn trong phiên b?n trư?c c?a SQL Server n?u l?n các con s? c?a các truy v?n qu?ng cáo-hoc đư?c th?c hi?n đ?ng th?i b?i m?t s? lư?ng ngư?i dùng.

Phát tri?n các truy v?n parameterized

SQL Server 7.0 s? d?ng m?t s? k? thu?t m?i, ch?ng h?n như b? nh? đ?m qu?ng cáo-hoc truy v?n và t? đ?ng parameterization. Tuy nhiên, các truy v?n đó SQL Server 7,0 t? đ?ng parameterizes gi?i h?n. S? d?ng các phương pháp sau đây đ? làm cho ch?c ch?n r?ng k? ho?ch truy v?n đư?c vec và có th? đư?c tái s? d?ng hi?u qu? hơn:
  • Tham s? d?u OLE DB và ODBC API cho phép tham s? ph?i đư?c xác đ?nh v?i m?t d?u ch?m h?i khi ngư?i dùng g?i truy v?n. Đi?u này có th? r?t h?u ích trong b?t k? ?ng d?ng, đ?c bi?t là cho các ?ng d?ng trung t?ng có th? h? truy v?n mô-đun nơi s? d?ng th? t?c đư?c lưu tr? là không có s?n. K? ho?ch truy v?n là đư?c t?o ra cho các truy v?n có tham s? d?u hi?u có th? đư?c tái s? d?ng b?i b?t k? khách hàng mà th?c hi?n truy v?n tương t?, ngay c? khi các giá tr? tham s? khác nhau đư?c quy đ?nh. Đ? bi?t thêm chi ti?t, xem ch? đ? "Tham s? d?u" trong SQL Server 7.0 sách Tr?c tuy?n.
  • sp_executesql Các sp_executesql th? t?c đư?c lưu tr? đư?c g?i là c?a nhà cung c?p OLE DB ho?c tr?nh đi?u khi?n ODBC khi đánh d?u thông s? đư?c s? d?ng trong m?t ?ng d?ng. Tuy nhiên, nó c?ng có th? đư?c g?i là tr?c ti?p b?i ?ng d?ng khác ho?c trong m?t th? t?c đư?c lưu tr? đ? m?t cách r? ràng parameterize qu?ng cáo-hoc truy v?n. Đi?u này có th? r?t h?u ích trong các ?ng d?ng ho?c th?c thi t?p tin mà tuyên b? thi công đư?c s? d?ng đ? th?c hi?n đ?ng SQL phát bi?u. Không gi?ng như sp_executesql, các báo cáo ch?y không cho phép parameterization. Đi?u này gi?i h?n cơ h?i tái s? d?ng k? ho?ch truy v?n. Đ? bi?t thêm chi ti?t, xem các "sp_executesql (T-SQL)" và "B?ng cách s? d?ng sp_executesql" các ch? đ? trong SQL Server 7.0 Sách tr?c tuy?n.
  • Th? t?c đư?c lưu tr? Th? t?c đư?c lưu tr? có nhi?u l?i ích, bao g?m c? kh? năng parameterize truy v?n và tái s? d?ng th?c hi?n k? ho?ch. Đ? bi?t thêm chi ti?t, xem các Các ch? đ? "Stored th? t?c" và "L?p tr?nh th? t?c lưu tr?" trong SQL Server 7,0 Sách tr?c tuy?n.

Xem d? li?u hi?u su?t giám sát

S? d?ng Nh?t k? hi?u su?t màn h?nh đ? xác đ?nh h? th?ng mà ngu?n tài nguyên đang gây ra các nút c? chai. Đăng nh?p màn h?nh hi?u su?t có th? cung c?p cho b?n m?t b?c tranh t?ng th? c?a h? th?ng và giúp t?p trung s? chú ? c?a b?n khi b?n xem d? li?u SQL Profiler. Xem xét các d? li?u hi?u su?t màn h?nh t? th?i gian khi hi?u su?t đư?c t?t thông qua th?i gian hi?u su?t gi?m. Xác đ?nh các S? lư?t truy c?p mà đ? b? ?nh hư?ng đ?u tiên, và sau đó xác đ?nh sau đây v?n đ? là phù h?p nh?t v?i t?nh h?nh c?a b?n:
  • Đ?i tư?ng: quá tr?nh
    S? lư?t truy c?p: b? vi x? l?
    Ví d?: SQL Máy chủ
  • Đ?i tư?ng: b? vi x? l?
    S? lư?t truy c?p: % th?i gian x? l?
    Ví d?: Ki?m tra m?i trư?ng h?p b? x? l?
  • Đ?i tư?ng: SQL Server: b? đ?m Manager
    S? lư?t truy c?p: mi?n phí B? đ?m
  • Đ?i tư?ng: SQL Server: b? đ?m Manager
    S? lư?t truy c?p: Trang b? đánh c?p Count
  • Đ?i tư?ng: SQL Server: b? nh? Manager
    S? lư?t truy c?p: b? nh? Tài tr? đang ch? gi?i quy?t
  • Đ?i tư?ng: SQL Server: SQL th?ng kê
    S? lư?t truy c?p: SQL Biên t?p/sec
N?u vi?c s? d?ng CPU, SQL biên d?ch/giây, và mi?n phí b? đ?m qu?y là cao, và các qu?y b? nh? c?p ch? gi?i quy?t và đánh c?p trang Count là th?p, đi?u này ch? ra r?ng CPU là các nút c? chai. T?p trung vào làm th? nào đ? có hi?u qu? parameterize và tái s? d?ng k? ho?ch truy v?n đ? tránh chi phí k? ho?ch truy v?n th? h?, và xem ph?n "Nhóm SQL Profiler v?t theo s? ki?n l?p" bài vi?t này. N?u mi?n phí b? đ?m và SQL biên d?ch/sec qu?y là th?p, và đánh c?p trang Count và b? nh? và tài tr? đang ch? qu?y là cao, SQL Máy ch? là b? nh? h?n ch?. T?p trung vào vi?c t?m ki?m truy v?n nơi tham gia băm là s? d?ng và có th? đư?c thay đ?i đ? l?p tham gia, và xem các "nhóm the SQL Profiler d?u v?t c?a th?i gian"ph?n c?a bài vi?t này. Cho bi?t thêm thông tin v? nh?ng qu?y, s? d?ng tên truy c?p đ? t?m ki?m các SQL Server 7.0 sách Online.

Xem d? li?u SQL Profiler

Khi b?n đang gi?i quy?t các v?n đ? hi?u su?t, nó là vô cùng có giá tr? đ? xem d? li?u SQL Profiler. B?n không c?n ph?i xem xét t?t c? các d? li?u mà b?n b? b?t; đư?c ch?n l?c. SQL Profiler giúp b?n đ? có hi?u qu? xem các d? li?u đư?c quay. Trên các Thu?c tính Tab (trên các Tệp tr?nh đơn, nh?p vào Thu?c tính), SQL Profiler cho phép b?n đ? gi?i h?n các d? li?u đư?c hi?n th? b?ng cách lo?i b? d? li?u c?t ho?c các s? ki?n, nhóm hay phân lo?i theo d? li?u c?t, và áp d?ng các b? l?c. B?n có th? t?m ki?m d?u v?t toàn b? ho?c ch? có m?t c?t c? th? cho giá tr? c? th? (trên các Ch?nh s?a tr?nh đơn, nh?p vào T?m ). B?n c?ng có th? ti?t ki?m m?t b?ng SQL Server SQL Profiler, d? li?u (trên các Tệp tr?nh đơn, đi?m đ?n Löu laøm, và sau đó nh?p vào D?u v?t B?ng), và sau đó ch?y truy v?n SQL ch?ng l?i nó.

Chú ý H?y ch?c ch?n r?ng b?n ch? l?c m?t t?p tin đ? lưu d?u v?t. N?u b?n làm theo các bư?c trên m?t d?u v?t ho?t đ?ng, b?n có nguy cơ m?t d? li?u b? b?t k? t? v?t đ? đư?c b?t đ?u. Lưu m?t d?u v?t ho?t đ?ng vào m?t t?p tin ho?c b?ng đ?u tiên (trên các Tệp tr?nh đơn, nh?p vào Löu laøm ), và sau đó m? l?i nó (trên các Tệp tr?nh đơn, nh?p vào M?) trư?c khi b?n ti?p t?c. Khi b?n làm vi?c v?i m?t t?p tin đ? lưu water, các l?c không lo?i b? v?nh vi?n d? li?u; d? li?u là ch? ?n, không xóa. B?n có th? thêm và lo?i b? các s? ki?n và d? li?u c?t đ? giúp t?p trung t?m ki?m c?a b?n.

B?n c?ng nên t?p trung vào các l?nh v?c mà b?n nh?n đư?c l?i nh?t. Các sau các y?u t? có th? giúp tăng hi?u su?t ?ng d?ng nhưng không nh?t thi?t ph?i đ?n m?c đ? tương t?. Trư?c khi b?n th?c hi?n b?t k? thay đ?i, xác đ?nh cách có hi?u qu? nh?ng thay đ?i có th? tùy thu?c vào các y?u t? sau:
  • Làm th? nào thư?ng xuyên ch?y truy v?n
  • Bao nhiêu c?i ti?n truy v?n có th? đư?c c?i thi?n
Ví d?, vi?c gi?m th?i gian th?c hi?n c?a m?t truy v?n duy nh?t t? 1,5 giây đ? 1,2 giây không có th? h?u ích n?u truy v?n không đư?c th?c hi?n thư?ng xuyên trong su?t c? ngày. Tuy nhiên, n?u các truy v?n đư?c th?c hi?n r?t thư?ng xuyên b?i m?t s? lư?ng ngư?i s? d?ng đ?ng th?i, vi?c c?i thi?n hi?u su?t có th? r?t hi?u qu?. Ngư?c l?i, vi?c c?i thi?n m?t truy v?n duy nh?t t? 6 phút 3 giây có th? không mang l?i m?t s? gia tăng đáng chú ? trong hi?u su?t t?ng th? n?u nó là hi?m khi đư?c s? d?ng. S? d?ng các nhóm và l?c k? thu?t trong SQL Profiler và c?a b?n ki?n th?c c?a các ?ng d?ng đ? ư?c tính nh?ng ?nh hư?ng c?a m?t truy v?n c? th? ho?c th? t?c trư?c khi b?n th?c hi?n b?t k? thay đ?i. T?p trung vào nh?ng thay đ?i có hi?u qu? nh?t đ?u tiên, và sau đó ti?p t?c v?i l?p đi l?p l?i qua các truy v?n và th? t?c cho đ?n khi b?n đ?t đ?n m?t m?c đ? nơi có đ? c?i thi?n.

Sau khi b?n lưu m?t d?u v?t SQL Profiler vào m?t t?p tin ho?c b?ng, m? l?i d?u v?t trong SQL Profiler và xem xét l?i n?i dung. Nhóm các SQL Profiler truy nguyên, h?y làm theo các bư?c sau:
  • Nhóm SQL Profiler v?t theo th?i gian th?c hi?n:
    1. Trên các Tệp tr?nh đơn, nh?p vào Thu?c tính.
    2. B?m vào các D? li?u c?t tab, và sau đó dư?i Các nhóm, b?m LÊN đ? di chuy?n Th?i gian. Nh?p vào XU?NG đ? lo?i b? t?t c? khác c?t.
    3. B?m vào các S? ki?n tab, và sau đó lo?i b? t?t c? s? ki?n ngo?i tr? TSQL SQL:StmtCompletedTSQL RPC: hoàn thành. Đi?u này cho phép b?n t?p trung vào ch? là các truy v?n mà đang th?c thi.
    4. Nh?p vào Ok.
    Nhóm theo th?i gian cho phép đ? d? dàng xem SQL phát bi?u, lô, và th? t?c đang ch?y các slowest. Xem xét các water khi v?n đ? x?y ra, và t?o ra m?t đư?ng cơ s? c?a hi?u su?t t?t. B?n có th? l?c theo b?t đ?u th?i gian đ? phá v? v?t thành ph?n khi hi?u su?t là ph?n t?t và riêng bi?t khi hi?u su?t là ngư?i nghèo. T?m các truy v?n v?i th?i gian dài nh?t khi hi?u su?t là t?t. Đây là r?t có th? là g?c c?a v?n đ?. Khi hi?u su?t t?ng th? h? th?ng gi?m, ngay c? t?t truy v?n có th? hi?n th? th?i gian dài v? h? đang ch? đ?i cho tài nguyên h? th?ng.

    Xem xét k? ho?ch th?c hi?n cho các truy v?n mà h?u h?t thư?ng xuyên có th?i gian dài. N?u b?n th?y r?ng m?t băm tham gia đang đư?c s? d?ng, xem xét vi?c s? d?ng các LOOP tham gia truy v?n g?i ? đ? bu?c m?t tham gia v?ng l?p l?ng nhau cho truy v?n. Nếu th?i gian th?c hi?n cho truy v?n b?ng cách s? d?ng m?t tham gia v?ng l?p là ít hơn, b?ng, ho?c th?m chí hơi cao hơn so v?i th?i gian th?c hi?n v?i s? tham gia băm, tham gia m?t v?ng l?p có th? m?t l?a ch?n t?t hơn n?u máy tính đang tr?i qua b? nh? cao và s? d?ng CPU. B?i gi?m căng th?ng trên nút c? chai tài nguyên (CPU và b? nh?), b?n có th? c?i thi?n hi?u su?t t?ng th? h? th?ng. Đ? bi?t thêm thông tin v? tham gia v?ng L?P truy v?n g?i ?, xem ch? đ? "Ch?n (T-SQL)" trong SQL Server 7.0 sách tr?c tuy?n.
  • Nhóm SQL Profiler v?t theo s? ki?n l?p:
    1. Trên các Tệp tr?nh đơn, nh?p vào Thu?c tính.
    2. B?m vào các D? li?u c?t tab, và sau đó theo các Các nhóm nhóm này, b?m LÊN đ? di chuy?n S? ki?n ClassVăn b?n v?i S? ki?n L?p h?c trên đ?u trang. Nh?p vào XU?NG đ? lo?i b? t?t c? các c?t khác theo các Các nhóm nhóm.
    3. B?m vào các S? ki?n tab, và sau đó làm cho ch?c ch?n r?ng t?t c? các s? ki?n đư?c bao g?m.
    4. Nh?p vào Ok.

Lo?i s? ki?n

Đ? xem nh?ng g? các lo?i c?a các s? ki?n đang x?y ra trên máy tính đang ch?y SQL Server và như th? nào thư?ng xuyên các s? ki?n x?y ra, nhóm c?a các S? ki?n L?p h?c c?t. T?m ki?m này c?t cho các s? ki?n sau đây:
  • MISC: Chu?n b? SQL và Exec chu?n b? SQL; CON CH?Y: Cursorprepare Một Chu?n b? SQL s? ki?n ch? ra r?ng m?t l?nh SQL đư?c chu?n b? s?n sàng đ? s? d?ng v?i m?t thi?t l?p k?t qu? m?c đ?nh (phía khách hàng con tr?) s? d?ng SQLPrepare/SQLExecute (ODBC) ho?c ICommandText::Prepare/ICommandText::Execute (cho OLE DB) v?i m?c đ?nh tùy ch?n con tr? chu?t: chuy?n ti?p ch?, ch?, đ?c rowset kích thư?c = 1. Một Cursorprepare s? ki?n ch? ra r?ng m?t con tr? phía máy ch? đ? đư?c chu?n b? trên m?t SQL tuyên b? b?ng cách s? d?ng SQLPrepare/SQLExecute (cho ODBC) ho?c ICommandText::Prepare/ICommandText::Execute (cho OLE DB) v?i m?t trong các tùy ch?n con tr? chu?t trư?c thi?t l?p m?t giá tr? không m?c đ?nh. M?t Exec chu?n b? s?n sàng SQL s? ki?n ch? ra r?ng m?t trong trư?c đó lo?i hi?n có chu?n b? cáo đ? đư?c th?c hi?n. N?u b?n xem l?n xu?t hi?n thư?ng xuyên c?a các các s? ki?n, ?ng d?ng c?a b?n là s? d?ng các mô h?nh chu?n b?/th?c hi?n khi nó m? ra k?t qu? c?a b?. N?u v?y, b?n ph?i xác đ?nh n?u b?n đang s? d?ng chu?n b?/th?c hi?n mô h?nh m?t cách chính xác.

    L? tư?ng nh?t, m?t ?ng d?ng chu?n b? m?t l?nh SQL m?t khi và th?c hi?n nó nhi?u l?n đ? cho c? tôi ưu hoa không ph?i biên d?ch m?t k? ho?ch m?i m?i khi b?n tuyên b? đư?c thi hành. M?i khi b?n ch?y m?t chu?n b? s?n sàng tuyên b?, b?n ti?t ki?m chi phí biên so?n truy v?n. N?u b?n ch? đ?nh th?c hi?n m?t truy v?n m?t th?i gian, Microsoft recommends mà b?n không chu?n cho nó. Chu?n b? và sau đó th?c hi?n m?t l?nh SQL đ?i h?i ba m?ng roundtrips: m?t đ? chu?n b? các báo cáo, m?t th?c thi các báo cáo, và m?t đ? unprepare các báo cáo. Chu?n b? con ch?y phía máy ch? yêu c?u t?i thi?u năm v?ng chuy?n đi: m?t đ? chu?n cho con tr?, m?t đ? th?c hi?n ho?c m? nó, m?t trong ho?c nhi?u hơn n?a đ? L?y t? nó, m?t đ? đóng nó, và m?t đ? unprepare nó. Th?c hi?n các truy v?n ch? đ?i h?i m?t roundtrip.

    Đ? xem làm th? nào có hi?u qu? c?a b?n ?ng d?ng này s? d?ng mô h?nh chu?n b?/th?c thi, so sánh s? l?n này hai s? ki?n (chu?n b? và th?c thi) x?y ra. S? lư?ng Exec chu?n b? SQL s? ki?n s? l?n hơn nhi?u so v?i T?ng ngu?n Chu?n b? SQLCursorPrepare s? ki?n (ít nh?t là ba đ?n năm l?n l?n hơn là m?t ư?c tính t?t). Đi?u này ch? ra r?ng phát bi?u chu?n b? đang đư?c dùng l?i thư?ng xuyên, đ? đ? kh?c ph?c s? tăng chi phí đ? t?o ra chúng. N?u s? lư?ng Chu?n b? SQLCursorPrepare s? ki?n là kho?ng tương đương v?i s? lư?ng Exec chu?n b? SQL các s? ki?n, đi?u này có th? cho th?y r?ng các ?ng d?ng không ph?i là có hi?u qu? s? d?ng mô h?nh chu?n b?/th?c hi?n. C? g?ng đ? chu?n b? m?t tuyên b? m?t th?i gian và tái s? d?ng nó càng nhi?u càng t?t. B?n c?ng có th? thay đ?i ?ng d?ng c?a b?n đ? chu?n b? phát bi?u m?t th?i gian và tái s? d?ng nh?ng phát bi?u.

    ?ng d?ng ph?i đư?c c? th? b?ng văn b?n đ? s? d?ng các mô h?nh chu?n b?/th?c thi m?t cách hi?u qu?. Các tr?n đ?i c?a m?t x? l? m?t tuyên b? chu?n b? đư?c ki?m soát b?i bao lâu b?n gi? HSTMT m? trong ODBC ho?c v?t ICommandText OLE DB. M?t trong nh?ng ph? bi?n th?c hành là đ? có đư?c m?t HSTMT, chu?n b? m?t l?nh SQL, th?c hi?n các chu?n b? s?n sàng tuyên b?, và sau đó HSTMT, qua đó thua x? l? các chu?n b? không có k? ho?ch. N?u b?n làm đi?u này, b?n không nh?n đư?c b?t k? l?i ích t? chu?n b?/th?c hi?n mô h?nh. Trong th?c t?, b?n có th? xem m?t s? xu?ng c?p hi?u su?t v? thêm trên cao c?a m?ng roundtrips. ?ng d?ng ph?i có m?t phương pháp đ? nh? cache HSTMT ho?c đ?i tư?ng v?i chu?n b? tuyên b? x? l? và truy c?p chúng cho tái s? d?ng. Tr?nh đi?u khi?n ho?c nhà cung c?p không làm đi?u này t? đ?ng; các ?ng d?ng ch?u trách nhi?m cho vi?c th?c hi?n, duy tr? và s? d?ng thông tin này. N?u ?ng d?ng không th? làm như v?y, h?y xem xét b?ng cách s? d?ng tham s? d?u thay v? các chu?n b?/th?c hi?n phương pháp.
  • B?ng cách s? d?ng tham s? d?u Các ?ng d?ng có th? s? d?ng tham s? d?u đ? t?i ưu hóa vi?c s? d?ng các cùng Transact l?nh-SQL nhi?u l?n v?i đ?u vào khác nhau và các giá tr? đ?u ra. L?n đ?u tiên mà m?t truy v?n đư?c th?c thi, nó chu?n b? như m?t truy v?n parameterized, và SQL Server t?o ra và lưu tr? m?t k? ho?ch parameterized cho truy v?n. Đ?i v?i các cu?c g?i ti?p theo đ? truy v?n tương t? b?ng cách s? d?ng m?t trong hai các thông cùng ho?c khác nhau s?, SQL Server không ph?i t?o ra m?t k? ho?ch m?i c?a truy v?n; SQL Server có th? tái s? d?ng hi?n t?i truy v?n k? ho?ch b?i thay th? các tham s? hi?n t?i.

    N?u ?ng d?ng s? d?ng tham s? d?u v?i các cu?c g?i đ?n SQLExecDirect (ODBC) ho?c ICommandText::Execute (cho OLE DB), tr?nh đi?u khi?n ho?c nhà cung c?p t? đ?ng gói s?n ph?m các l?nh SQL và th?c hi?n nó như m?t sp_executesql cu?c g?i. Các báo cáo không ph?i đư?c chu?n b? và th?c hi?n m?t cách riêng bi?t. Khi SQL Server s? nh?n đư?c m?t cu?c g?i đ?n sp_executesql, nó t? đ?ng ki?m tra b? nh? cache c?a th? t?c cho m?t k? ho?ch phù h?p và reuses r?ng k? ho?ch ho?c t?o ra m?t k? ho?ch m?i.

    Đ? xác đ?nh n?u b?n ?ng d?ng này hi?n đang s? d?ng tham s? d?u, b?n có th? t?m ki?m cácVăn b?n c?t trong SQL Profiler v?t cho "sp_executesql." Tuy nhiên, b?i v? sp_executesql có th? đư?c g?i là tr?c ti?p, không ph?i t?t c? các trư?ng h?p cho th?y vi?c s? d?ng tham s? d?u.

    Đ? bi?t thêm thông tin v? chu?n b?/th?c hi?n m?u, xem "s? d?ng th?c hi?n k? ho?ch b? nh? đ?m và l?i" ch? đ? trong SQL Server 7.0 sách Tr?c tuy?n. Đ? bi?t thêm thông tin v? d?u hi?u tham s?, xem tham s?" Đánh d?u"ch? đ? trong SQL Server 7.0 sách tr?c tuy?n.
  • SP: hoàn thành Năng đ?ng SQL phát bi?u th?c hi?n v?i l?nh thi công hi?n th? như là m?t SP: hoàn thành s? ki?n v?i các văn b?n "Năng đ?ng SQL." M? r?ng các SP: hoàn thành s? ki?n, và sau đó t?m ki?m cho b?t k? l?n xu?t hi?n mà có "năng đ?ng SQL"như các văn b?n. N?u có r?t nhi?u ngư?i trong s? nh?ng s? ki?n này, b?n có th? c?i thi?n hi?u su?t c?a ?ng d?ng b?ng cách s? d?ng sp_executesql thay v? c?a tuyên b? thi công. Các sp_executesql lưu tr? th? t?c gi?y phép SQL Server đ? tái s? d?ng th?c hi?n k? ho?ch n?u truy v?n tương t? đư?c th?c thi m?t l?n n?a b?ng cách s? d?ng tham s? khác nhau. Khi b?n s? d?ng các EXECUTE tuyên b?, k? ho?ch không vec, và nó không ph?i s? d?ng l?i tr? khi các truy v?n đư?c th?c thi m?t l?n n?a b?ng cách s? d?ng các tham s? tương t?.

    Đ? xác đ?nh truy v?n ho?c th? t?c s? d?ng năng đ?ng SQL s? ki?n v?i thi công tuyên b?, lưu ? các ID k?t n?i và b?t đ?u th?i gian c?a cho m?i s? ki?n. Tách các water (h?y b? S? ki?n ClassVăn b?n t? các Các nhóm tiêu đ?). Sau khi b?n tách v?t, nó đư?c s?p x?p trong Th? t? th?i gian. B?n có th? l?c d?u v?t c?a k?t n?i ID (trên các Các b? l?c th?), và sau đó lo?i b? t?t c? các l?p h?c s? ki?n ngo?i tr? các SP: b?t đ?uSP: hoàn thành các s? ki?n cho tăng d? đ?c. B?n có th? sau đó t?m ki?m các B?t đ?u th?i gian c?a s? ki?n này (ngày các Ch?nh s?a tr?nh đơn, nh?p vàoT?m). Các k?t qu? hi?n th? khi b?t đ?u s? ki?n SQL năng đ?ng. N?u s? ki?n này di?n ra trong m?t th? t?c đư?c lưu tr?, các s? ki?n xu?t hi?n gi?a các SP: b?t đ?uSP: hoàn thành các s? ki?n cho r?ng th? t?c. N?u s? ki?n này đ? không x?y ra trong m?t lưu tr? th? t?c, nó đ? đư?c th?c hi?n như m?t truy v?n qu?ng cáo-hoc, và b?n có th? s? d?ng các d? li?u c?t)Tên ?ng d?ng, NT Tên ngư?i dùngvà nh?ng ngư?i khác) đ? xác đ?nh nơi l?nh đư?c th?c thi. Đ? xác đ?nh các văn b?n c?a l?nh và b?i c?nh nơi nó đ? đư?c th?c hi?n, b?n c?ng có th? thêm các l?p h?c t? ch?c s? ki?n, ch?ng h?n như SQL:BatchCompletedSQL:RPCCompleted.

    Sau khi b?n xác đ?nh nơi các tuyên b? EXECUTE là đư?c s? d?ng, xem xét vi?c thay th? nó b?ng m?t cu?c g?i đ?n sp_executesql. Ví d?, h?y xem xét k?ch b?n sau đây nơi thi công l?nh đư?c s? d?ng v?i đ?ng SQL. M?t th? t?c ph?i m?t m?t tên b?ng, ID, và idValue như đ?u vào tham s?, và sau đó th?c hi?n m?t tuyên b? ch?n t? các b?ng d?a trên giá tr? ID. B?ng cách s? d?ng m?t tuyên b? thi công, các th? t?c trông tương t? như m? sau đây:
    drop proc dynamicUsingEXECUTE
    		  go create proc dynamicUsingEXECUTE @table sysname, @idName varchar(10),
    		  @idValue varchar(10) as declare @query nvarchar(4000) -- Build query string
    		  with parameter. -- Notice the use of escape quotes. select @query = 'select *
    		  from ' + @table + ' where ' + @idName + ' = ''' + @idValue + '''' exec (@query)
    		  go
    Gi? đ?nh r?ng các truy v?n không t? đ?ng vec, n?u b?n th?c hi?n th? t?c này đ?i v?i các tiêu đ? b?ng trong các quán rư?u cơ s? d? li?u m?u hai l?n v?i các giá tr? khác nhau cho các @ idValue tham s?, SQL Server ph?i t?o ra m?t k? ho?ch riêng bi?t truy v?n cho m?i th?c hi?n. Ví dụ:
    exec dynamicUsingEXECUTE
    		  'titles', 'title_id', 'MC2222' go exec dynamicUsingEXECUTE 'titles',
    		  'title_id', 'BU7832'
    Chú ý Trong ví d? này, các truy v?n là đơn gi?n đ? r?ng SQL Server có th? t? đ?ng parameterize nó và th?c s? tái s? d?ng k? ho?ch th?c hi?n. Tuy nhiên, N?u đi?u này là m?t truy v?n ph?c t?p SQL Server có th? không t? đ?ng parameterize, S? d?ng SQL Server có th? không l?i k? ho?ch đ? th?c hi?n th? hai n?u các @ idValue tham s? đư?c thay đ?i. Gi?i h?n truy v?n đơn gi?n sau nh?ng ph?c t?p c?a các ví d?.

    B?n có th? vi?t l?i th? t?c này s? d?ng sp_executesql thay v? c?a tuyên b? thi công. H? tr? cho tham s? thay th? làm cho sp_executesql hi?u qu? hơn b?i v? nó t?o ra th?c hi?n các k? ho?ch thêm có kh? năng đư?c tái s? d?ng b?i máy ch? SQL. Ví dụ:
    drop proc dynamicUsingSP_EXECUTESQL go create proc
    		  dynamicUsingSP_EXECUTESQL @table sysname, @idName varchar(10), @idValue
    		  varchar(10) as declare @query nvarchar(4000) -- Build query string with
    		  parameter select @query = 'select * from ' + @table + ' where ' + @idName + ' =
    		  @idValue' -- Now execute with parameter exec sp_executesql @query, N'@idValue
    		  varchar(10)', @idValue go exec dynamicUsingSP_EXECUTESQL 'titles', 'title_id',
    		  'MC2222' go exec dynamicUsingSP_EXECUTESQL 'titles', 'title_id',
    		  'BU7832'
    Trong ví d? này, l?n đ?u tiên mà các sp_executesql tuyên b? đư?c thi hành, SQL Server t?o ra m?t k? ho?ch parameterized Đ?i v?i nh?ng tuyên b? ch?n t? tiêu đ? v?i title_id như tham s?. Đ? th?c hi?n th? hai, SQL Server reuses các k? ho?ch v?i các giá tr? tham s? m?i. Để biết thêm thông tin về sp_executesql, xem "sp_executesql (T-SQL)" và "B?ng cách s? d?ng sp_executesql" ch? đ? trong SQL Server 7.0 sách tr?c tuy?n.
  • SP:RECOMPILES S? ki?n này ch? ra r?ng m?t th? t?c đư?c lưu tr? biên trong th?i gian th?c hi?n. Nhi?u recompile s? ki?n cho th?y r?ng máy ch? SQL là s? d?ng tài nguyên cho biên so?n truy v?n thay v? th?c hi?n truy v?n.
N?u b?n không th?y b?t k? c?a nh?ng s? ki?n này, ?ng d?ng này đang th?c hi?n ch? qu?ng cáo-hoc truy v?n đ?i v?i SQL Server. Tr? khi SQL Server xác đ?nh nó có th? t? đ?ng parameterize m?t s? truy v?n ho?c n?u như v?y tham s? đư?c s? d?ng nhi?u l?n, m?i truy v?n đư?c th?c thi đ?i h?i máy ch? SQL đ? t?o ra m?t k? ho?ch th?c hi?n m?i. SQL Server Performance Giám sát nên hi?n th? nhi?u SQL biên d?ch/sec. Đi?u này có th? là CPU chuyên sâu cho nhi?u ngư?i s? d?ng đ?ng th?i. Đ? làm vi?c xung quanh v?n đ? này, t?m th?y thư?ng xuyên nh?t th?c hi?n truy v?n, và xem xét vi?c t?o ra các th? t?c đư?c lưu tr? cho các truy v?n này, b?ng cách s? d?ng tham s? đánh d?u, ho?c b?ng cách s? d?ng sp_executesql.

THAM KH?O

Đ? bi?t thêm chi ti?t v? giám sát và g? r?i các v?n đ? hi?u su?t trong SQL Server, nh?p vào s? bài vi?t sau đ? xem các bài vi?t trong cơ s? ki?n th?c Microsoft:
224587Làm th? nào đ? g? r?i ?ng d?ng hi?u su?t v?i SQL Server
224453 INF: S? hi?u bi?t và gi?i quy?t SQL Server 7.0 hay 2000 ch?n v?n đ?
243586 X? l? s? c? th? t?c đư?c lưu tr? đ?a
243589 Làm th? nào đ? kh?c ph?c s? c? truy v?n ch?m-ch?y SQL Server 7.0 ho?c sau này
251004 INF: Làm th? nào đ? giám sát SQL Server 7.0 ch?n

Thu?c tính

ID c?a bài: 243588 - L?n xem xét sau cùng: 21 Tháng Tám 2011 - Xem xét l?i: 2.0
Áp d?ng
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 64-bit Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Standard Edition
T? khóa: 
kbhowtomaster kbhowto kbinfo kbmt KB243588 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:243588

Cung cấp Phản hồi

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com