KB2526959-memperbaiki: masalah kinerja aplikasi ketika kueri referensi tabel sementara yang dibuat dalam sesi di SQL Server 2008 dan di SQL Server 2008 R2

Microsoft mendistribusikan perbaikan Microsoft SQL Server 2008 R2 sebagai satu file yang dapat diunduh. Karena perbaikan bersifat kumulatif, setiap Edaran baru berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan rilis perbaikan SQL Server 2008 R2 sebelumnya.

Gejala

Pertimbangkan skenario berikut:

  • Aplikasi menjalankan kueri yang mereferensikan beberapa tabel sementara di Microsoft SQL Server 2008 dan di Microsoft SQL Server 2008 R2. Tabel sementara dibuat dalam sesi dan bukan dalam prosedur yang disimpan.

  • Rencana kueri disembunyikan.

  • Banyak pengguna menjalankan kueri yang sama dalam lingkungan yang sangat bersamaan. Misalnya, banyak pengguna menggunakan aplikasi yang menjalankan kueri berikut ini:

    create table #x (col1 int) go insert into #x values (1) go select * from #x where col1 = 1 go

Dalam skenario ini, aplikasi mengalami masalah kinerja.Catatan Untuk informasi selengkapnya tentang cara mengidentifikasi masalah ini, lihat bagian "informasi selengkapnya".

Penyebab

Masalah ini terjadi karena rencana kueri yang sama disisipkan ke dalam singgahan dalam Bucket hash yang sama untuk setiap pengguna saat teks kueri sama. Saat sejumlah besar rencana terpotong ke Bucket yang sama (juga dikenal sebagai rantai hash), waktu untuk mencari rencana dalam singgahan meningkat secara signifikan, dan masalah kinerja mungkin terjadi. Selain itu, utas pekerja mungkin mengalami masalah spinlock yang parah, dan utas lainnya terpengaruh saat utas pekerja ini tidak melakukan hasil Penjadwal yang tepat.

Pemecahan Masalah

Catatan Hanya pembaruan untuk SQL Server 2008 R2 yang tersedia saat ini. Untuk SQL Server 2008, lihat bagian "penanganan masalah" untuk mengatasi masalah ini.

Informasi pembaruan kumulatif

SQL Server 2008 R2 Paket Layanan 1

Perbaikan untuk masalah ini pertama kali dirilis dalam pembaruan kumulatif 1 untuk SQL Server 2008 R2 Service Pack 1. Untuk informasi selengkapnya tentang cara mendapatkan paket pembaruan kumulatif ini, klik nomor artikel berikut ini untuk menampilkan artikel di Basis Pengetahuan Microsoft:

2544793 Paket pembaruan kumulatif 1 untuk SQL Server 2008 R2 Paket Layanan 1Catatan Karena Build bersifat kumulatif, setiap rilis perbaikan baru berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan rilis perbaikan SQL Server 2008 R2 sebelumnya. Kami menyarankan agar Anda mempertimbangkan untuk menerapkan rilis perbaikan terbaru yang berisi hotfix ini. Untuk informasi selengkapnya, klik nomor artikel berikut untuk melihat artikel di Pangkalan Pengetahuan Microsoft:

2567616 Build SQL Server 2008 R2 yang dirilis setelah SQL Server 2008 R2 Service Pack 1 dirilis

SQL Server 2008 R2

Perbaikan untuk masalah ini pertama kali dirilis dalam pembaruan kumulatif 7. Untuk informasi selengkapnya tentang cara mendapatkan paket pembaruan kumulatif ini untuk SQL Server 2008 R2, klik nomor artikel berikut ini untuk menampilkan artikel di Basis Pengetahuan Microsoft:

2507770 Paket pembaruan kumulatif 7 untuk SQL Server 2008 R2 Catatan Karena Build bersifat kumulatif, setiap rilis perbaikan baru berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan rilis perbaikan SQL Server 2008 R2 sebelumnya. Kami menyarankan agar Anda mempertimbangkan untuk menerapkan rilis perbaikan terbaru yang berisi hotfix ini. Untuk informasi selengkapnya, klik nomor artikel berikut untuk melihat artikel di Pangkalan Pengetahuan Microsoft:

981356 Build SQL Server 2008 R2 yang dirilis setelah SQL Server 2008 R2 dirilis

Status

Microsoft telah mengonfirmasi bahwa ini adalah masalah pada produk Microsoft yang tercantum di bagian "Berlaku untuk".

Penyelesaian Masalah

Untuk mengatasi masalah ini di SQL Server 2008 dan SQL Server 2008 R2, Pindahkan setiap referensi tabel sementara ke dalam prosedur yang disimpan.

Informasi Selengkapnya

Untuk informasi selengkapnya tentang cara membuat dan mengubah dasar tabel, kunjungi situs web MSDN berikut:

Cara membuat dan mengubah dasar tabelSpinlock sanggahan dapat diidentifikasi dari sys.dm_os_spinlock_stats Dynamic Management View (DMV) yang memiliki tingkat sanggahan tinggi di SOS_CACHESTORE spinlock. Untuk mengidentifikasi masalah ini, jalankan kueri yang menyerupai berikut ini:

select cp.bucketid, count(cp.bucketid) as BucketCount, st.text from sys.dm_exec_cached_plans cp cross apply sys.dm_exec_sql_text(cp.plan_handle) as st group by cp.bucketid, st.text having count(cp.bucketid) >1 order by BucketCount descJika kondisi berikut ini benar saat Anda menjalankan kueri ini, Anda mungkin mengalami masalah kinerja:

  • Kueri ini menghasilkan teks kueri yang sama.

  • Hitungan untuk Bucket yang sama berukuran besar.Catatan Hitungan besar untuk bucketid yang sama biasanya lebih dari 1000.

  • Referensi kueri tabel sementara

Perlu bantuan lainnya?

Kembangkan keterampilan Anda
Jelajahi pelatihan
Dapatkan fitur baru terlebih dahulu
Gabung Microsoft Insider

Apakah informasi ini bermanfaat?

Terima kasih atas umpan balik Anda!

Terima kasih atas umpan balik Anda! Sepertinya menghubungkan Anda ke salah satu agen dukungan Office kami akan sangat membantu.

×