Nilai waktu SQL Server mungkin salah ketika Anda menggunakan utilitas atau teknologi yang mengubah frekuensi CPU

Bekerja di mana saja dari perangkat dengan Microsoft 365

Mutakhirkan ke Microsoft 365 untuk bekerja di mana saja dengan fitur dan pembaruan terbaru.

Tingkatkan sekarang

Ringkasan

Microsoft SQL Server 2005 menggunakan penghitung CPU resolusi tinggi untuk menyediakan kapabilitas waktu mikrodetik. Mikrodetik adalah satu juta detik (atau satu seperserdetik). Namun, nilai waktu SQL Server mungkin salah jika Anda menggunakan teknologi yang mengubah frekuensi CPU. Misalnya, masalah ini dapat terjadi ketika Anda menggunakan salah satu dari teknologi berikut ini:

  • Stepping CPU

  • Teknologi AMD Cool'n ' Quiet

  • Berbagai skema daya

Artikel ini berisi metode dan informasi tambahan untuk membantu Anda mengatasi masalah ini.

Gejala

Saat Anda menggunakan pernyataan waktu yang ditetapkan untuk menampilkan eksekusi server, mengurai, dan kali kompilasi, Anda mungkin mendapatkan nilai yang salah. Misalnya, Anda mungkin melihat bahwa waktu yang berlalu dari waktu eksekusi SQL Server lebih dari waktu CPU. Masalah ini dapat mempengaruhi akurasi tuning kinerja. Masalah ini terjadi ketika Anda menggunakan salah satu dari teknologi yang tercantum di bagian "Ringkasan" di server.

Penyebab

Masalah ini terjadi karena frekuensi CPU berubah saat Anda menggunakan teknologi ini. SQL Server 2005 menggunakan penghitung CPU resolusi tinggi untuk menyediakan kapabilitas waktu mikrodetik. Jika frekuensi CPU diubah untuk menghemat energi dan mengurangi output panas, durasi terhitung mungkin salah.

Pemecahan Masalah

Informasi paket layanan

Untuk mengatasi masalah ini, Dapatkan paket layanan terbaru untuk SQL Server 2005. Untuk informasi selengkapnya, klik nomor artikel berikut ini untuk menampilkan artikel di Basis Pengetahuan Microsoft:

913089 Cara mendapatkan paket layanan terbaru untuk SQL Server 2005Catatan Dalam paket layanan SQL Server 2005 3 dan yang lebih baru, stempel waktu prosesor tidak digunakan. Versi SQL Server 2005 ini menggunakan pengatur waktu yang lebih andal dengan presisi maksimum 1 milidetik.

Status

Masalah ini pertama kali dikoreksi di SQL Server 2005 Service Pack 3.

Penyelesaian Masalah

SQL Server 2005 memerlukan titik data yang diketahui dan stabil untuk melakukan penyetelan kinerja yang akurat. Jika penyetelan frekuensi CPU dinamis diaktifkan di komputer, Anda bisa menonaktifkannya sehingga CPU mempertahankan laju frekuensi stabil sebelum Anda mulai memantau dan menyelaraskan kinerja SQL Server. Untuk melakukan ini, gunakan metode berikut ini.

Mengonfigurasikan skema daya pada komputer untuk memaksa CPU tetap berada pada frekuensi maksimum

Untuk melakukannya, ikuti langkah-langkah berikut:

  1. Klik mulai, klik Jalankan, ketik powercfg. CPL, lalu klik OK.

  2. Dalam kotak dialog properti Opsi Power , klik selalu aktif dalam daftar skema Power .

  3. Klik OK.

Drift mungkin terjadi. Drift adalah divergensi antara nilai frekuensi CPU. Untuk informasi selengkapnya, lihat bagian "Drift". Dalam kasus ini, Anda harus memulai ulang Microsoft Windows untuk mensinkronisasi ulang frekuensi semua CPU setelah Anda mengubah skema daya. Jika Anda tidak bisa memulai ulang komputer, Aktifkan SQL Server Processor Affinity untuk mencegah alur kerja SQL Server berpindah antar CPU. Saat Anda melakukan ini, Anda tidak harus memulai ulang komputer meskipun ada perbedaan antara nilai frekuensi CPU. Untuk mengaktifkan afinitas prosesor SQL Server untuk semua CPU di server, Anda harus menggunakan masker berbeda, tergantung pada jumlah prosesor logika yang ada di server. Tabel berikut ini mencantumkan skenario contoh.

Nomor CPU

Pernyataan untuk mengaktifkan afinitas prosesor

02 CPU

exec sp_configure ' Affinity Mask ', 0x00000003GOreconfigureGO

04 CPU

exec sp_configure ' Affinity Mask ', 0x0000000FGOreconfigureGO

08 CPU

exec sp_configure ' Affinity Mask ', 0x000000FFGOreconfigureGO

16 CPU

exec sp_configure ' afinitas masker ', 0x0000FFFFGOreconfigureGO

CPU 32

exec sp_configure ' afinitas masker ', 0xFFFFFFFFGOreconfigureGO

Catatan Mungkin tidak cukup untuk menonaktifkan fitur variasi frekuensi CPU di tingkat BIOS. Berbagai utilitas pihak ketiga bisa mengubah frekuensi CPU. Beberapa penerapan mengaktifkan penyetelan frekuensi bahkan saat CPU berada di bawah pengaturan Power scheme maksimum. Dalam kasus ini, Anda harus menonaktifkan utilitas pihak ketiga ini saat Anda menjalankan penyetelan kinerja di SQL Server 2005.

Gunakan utilitas dan driver pihak ketiga untuk menyinkronkan frekuensi CPU dan penghitung jam CPU

Pada kesempatan langka, sistem mungkin memerlukan pembaruan dari produsen untuk memperbaiki masalah frekuensi CPU. Ini adalah praktik terbaik untuk memeriksa sistem untuk pembaruan BIOS, pengendali, dan firmware terbaru jika Anda menduga bahwa sistem mungkin mengalami masalah.

Informasi Selengkapnya

Microsoft SQL Server 2000 dan versi SQL Server yang lebih lama menggunakan mekanisme waktu Windows. Mekanisme pengaturan waktu gunakan nilai milidetik-presisi. Biasanya, presisi ini adalah 10 hingga 15 mdtk. Namun, presisi mungkin sebesar 55 ms. Kueri SQL Server sering diselesaikan dalam rentang waktu tunggal milidetik atau mikrodetik. Presisi ini memerlukan pengatur waktu resolusi tinggi. Oleh karena itu, laporan SQL Server versi ini durasi beberapa kueri sebagai 0 ms. Oleh karena itu, sulit untuk memantau kinerja dan menyelaraskan kinerja SQL Server di versi SQL Server. SQL Server 2005 meningkatkan akurasi dengan menggunakan penghitung CPU beresolusi tinggi untuk menyediakan kapabilitas waktu mikrodetik. Saat Anda menggunakan teknologi yang tercantum di bagian "Ringkasan", nilai waktu yang dilaporkan mungkin salah. Masalah ini dapat mempengaruhi objek dan fitur berikut ini:

  • Lacak kejadian:

    • Acara perhatian

    • Acara di simpul prosedur tersimpan

    • Acara di simpul TSQL

    • Acara di node objek

    • Acara di simpul transaksi

  • Tampilan manajemen dinamis:

    • sys.dm_exec_query_stats

    • sys.dm_exec_requests

    • sys.dm_exec_sessions

    • sys.dm_io_pending_io_requests

    • sys.dm_os_ring_buffers

    • sys.dm_os_sys_info

    • sys.dm_io_virtual_file_stats

    • sys.dm_os_wait_stats

  • Pernyataan waktu statistik yang ditetapkan

  • Tabel sistem sysprocesses

Setelah Anda menginstal SQL Server 2005 Service Pack 2 (SP2), SQL Server mencatat pesan kesalahan dalam log kesalahan saat SQL Server mendeteksi bahwa pengatur waktu resolusi tinggi tidak sinkron antara CPU. Pesan kesalahan menunjukkan bahwa pengaturan waktu kinerja mungkin tidak akurat, dan pengguna harus menggunakan data kinerja dengan hati-hati. Teks pesan kesalahan yang menyerupai salah satu pesan kesalahan berikut:

Pesan galat 1

Penghitung stempel waktu CPU pada id Penjadwal 2 tidak disinkronkan dengan CPU lain.

Pesan galat 2

Frekuensi stempel waktu CPU telah berubah dari 191469 ke 1794177 kutu per milidetik. Frekuensi baru akan digunakan

SQL Server menggunakan instruksi penghitung stempel waktu nyata (RDTSC) untuk mendapatkan hitungan Tick CPU 64-bit. Anda dapat membagi nilai ini dengan frekuensi CPU untuk mengonversi nilai ke nilai milidetik. Variasi pengaturan waktu dapat terjadi ketika frekuensi CPU berubah atau penyimpangan terjadi.

Stepping CPU

Stepping CPU ditetapkan sebagai perubahan yang disengaja dalam frekuensi CPU. Rangkaian CPU mungkin juga dikenal sebagai Intel SpeedStep Technology atau AMD PowerNow! teknologi. Saat terjadi peningkatan CPU, kecepatan CPU mungkin bertambah atau berkurang dalam kelipatan sebesar 50 MHz untuk menghemat energi dan mengurangi output panas. CPU yang berada di dalam simpul non-seragam memori (NUMA) yang sama tidak menyesuaikan frekuensi. Tabel berikut ini menjelaskan bagaimana perubahan yang dilakukan CPU mungkin mempengaruhi penghitungan waktu.

Rekreasi

RDTSC kutu

Centang per milidetik (frekuensi)

Waktu dinding jam

Mulai batch

,1

200

0-0

Langkah frekuensi turun

200

100

1ms

Akhir batch

500

3ms

KESELURUHAN

500

4ms

SQL Server menangkap kutu rdtsc di awal dan akhir rdtsc centang. Lalu, SQL Server membagi nilai dengan nilai frekuensi. Dalam contoh ini, perhitungan waktu berikut ini terjadi ketika Anda menggunakan nilai frekuensi 200 atau 100:

  • Frekuensi 200: 500/200 = 2,5 MS

  • Frekuensi 100: 500/100 = 5 mdtk

Tidak ada perhitungan waktu yang cocok dengan jam dinding aktual dari 4 mdtk. Jika penghitungan ini digunakan dalam Kejadian RPC: pelacakan selesai , maka durasi dan waktu akhir kolom data dilaporkan salah. Acara RPC: selesai menangkap waktu jam dinding mulai dan jumlah centang CPU. Untuk mendapatkan resolusi yang lebih tinggi dari persediaan Windows di SQL Server 2005, kolom data durasi dan waktu berakhir dalam jejak SQL Server dihitung dengan menggunakan CPU Count Tick yang telah berlalu. Kolom waktu selesai dihitung dengan menambahkan kolom durasi ke kolom waktu mulai . Dalam contoh ini, kolom waktu selesai dihitung dengan salah menambahkan 2,5 MS atau 5 MD ke waktu mulai.

Melayang

Drift adalah divergensi dalam nilai jam CPU. Sistem yang memiliki beberapa CPU dapat menghasilkan nilai jam CPU yang berbeda untuk titik waktu yang sama. Meskipun tidak umum, CPU mungkin mengalami pemisahan jam seiring berjalannya waktu. Contoh berikut ini menunjukkan bagaimana perubahan Drift bisa mempengaruhi hasil dari kolom data durasi dalam jejak SQL Server. Contoh ini mengasumsikan bahwa frekuensi CPU tetap stabil pada 200 centang per milidetik. Tabel berikut ini mengilustrasikan kejadian dalam skenario ini.

Rekreasi

CPU yang dijadwalkan Windows

CPU 1 RDTSC

CPU 2 RDTSC

Waktu dinding jam

Mulai batch

,1

100

1100

0-0

Akhir batch

2

900

1900

4 mdtk

KESELURUHAN

4 mdtk

SQL Server menangkap kutu RDTSC pada titik awal dan titik akhir. Lalu, SQL Server membagi nilai dengan nilai frekuensi. Dalam contoh ini, Windows menjadwalkan thread pekerja SQL Server pada dua CPU yang berbeda. Thread pekerja SQL Server yang Layanan batch pertama berjalan pada CPU pertama (CPU 1). Namun, eksekusi batch terganggu di beberapa titik, dan SQL Server mengirimkan eksekusi batch ke antrian tertunda. Ketika SQL Server mengirim thread pekerja SQL Server yang Layanan batch ini ke antrian runnable lagi, Windows mengirimkan utas untuk dijalankan di CPU kedua (CPU 2). Thread pekerja SQL Server selesai berjalan pada CPU 2. Karena Drift CPU, nilai Tick akhir yang ditangkap dari CPU 2 adalah 1900 dan bukan 900. Anda bisa menghindari perilaku ini jika Anda mengaktifkan afinitas prosesor SQL Server. Perhitungan waktu berikut ini digunakan dalam contoh ini:

  • Nilai yang tidak benar tapi dilaporkan: (1900 – 100 = 1800)/200 = 9 MS

  • Nilai yang benar: (900 – 100 = 800)/200 = 4 MS

Nilai kolom durasi untuk RPC: selesai acara akan dilaporkan sebagai 9 MS dan bukan 4 mdtk. Hasil ini lebih dari dua kali nilai yang benar dari 4 mdtk. Pesan peringatan melayang ditambahkan ke SQL Server 2005 untuk menunjukkan bahwa output kinerja yang disebutkan sebelumnya mungkin tidak dapat diandalkan. Dalam beberapa situasi yang tidak ditemukan, SQL Server 2005 SP2 mungkin melaporkan pesan peringatan tentang hal berikut:

  • Pesan peringatan Drift palsu

  • Drift dapat menjadi puluhan milidetik tanpa menyebabkan efek sistem yang nyata

Anda harus berhati-hati saat mengevaluasi output yang terkait dengan kinerja dan saat Anda membandingkan output yang terkait dengan kinerja pada pengaturan waktu dinding. Jika tidak ada tanda-tanda masalah kinerja lainnya, biasanya Anda dapat mengabaikan pesan peringatan Drift. Misalnya, Anda biasanya bisa mengabaikan pesan peringatan Drift dalam situasi berikut:

  • Proses berjalan seperti yang diharapkan.

  • Kueri SQL Server tidak berjalan dalam pola durasi yang aneh.

  • Anda tidak melihat tanda-tanda kemacetan lainnya.

Namun, sebelum Anda mengabaikan pesan peringatan Drift, kami menyarankan agar Anda menghubungi produsen Anda untuk memastikan bahwa tidak ada masalah yang diketahui. Anda bisa menggunakan bendera pelacakan 8033 (– T8033) untuk kembali ke perilaku pelaporan dalam versi rilis asli SQL Server 2005 dan di SQL Server 2005 SP1. Versi rilis asli SQL Server 2005 dan SQL Server 2005 SP1 tidak melaporkan pesan peringatan Drift. Jika Anda menjalankan versi rilis asli dari SQL Server 2005 atau SQL Server 2005 SP1 tanpa masalah, Anda biasanya bisa mengabaikan pesan tersebut.

Mengapa pernyataan WAITFOR DELAY berfungsi dengan benar? Bagaimana dengan proses sistem periodik?

Mekanisme waktu habis tidak terpengaruh oleh desain beresolusi tinggi. SQL Server tidak menggunakan pengatur waktu resolusi tinggi untuk aktivitas berbasis timer. Beberapa aktivitas waktu habis didasarkan pada pengatur waktu yang dikurangi yang menggunakan fungsi Gettickcount . Aktivitas jangka waktu ini mencakup waktu JEDA, pernyataan WAITFOR DELAY, dan deteksi kemacetan.

Untuk informasi selengkapnya, klik nomor artikel berikut untuk melihat artikel di Pangkalan Pengetahuan Microsoft:

938448 Server berbasis Windows Server 2003 mungkin mengalami penghitung stempel waktu melayang jika server menggunakan dual-core AMD Opteron atau prosesor multiprocessor AMD Opteron

895980 Program yang menggunakan fungsi QueryPerformanceCounter mungkin berkinerja buruk di Windows Server 2003 dan di Windows XPProduk pihak ketiga yang dibahas dalam artikel ini dibuat oleh perusahaan yang independen dari Microsoft. Microsoft tidak memberikan jaminan, tersirat atau sebaliknya, tentang kinerja atau keandalan produk ini.

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.

×