Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Menganalisis Kinerja I/O untuk SQL Server

Salah satu hambatan kinerja paling umum yang saya lihat sebagai konsultan adalah kinerja subsistem penyimpanan yang tidak memadai. Ada sejumlah alasan untuk kinerja penyimpanan yang buruk, tetapi mengukurnya dan memahami apa yang perlu diukur dan dipantau selalu merupakan latihan yang berguna.

Sebenarnya ada tiga metrik utama yang paling penting dalam mengukur kinerja subsistem I/O:

Latensi

Metrik pertama adalah latensi, yang merupakan waktu yang dibutuhkan I/O untuk menyelesaikannya. Ini sering disebut waktu respons atau waktu layanan. Pengukuran dimulai saat sistem operasi mengirim permintaan ke drive (atau pengontrol disk) dan berakhir saat drive selesai memproses permintaan. Pembacaan selesai saat sistem operasi menerima data, sedangkan penulisan selesai saat drive menginformasikan sistem operasi bahwa ia telah menerima data.

Untuk penulisan, data mungkin masih berada dalam cache DRAM pada drive atau pengontrol disk, bergantung pada kebijakan caching dan perangkat keras Anda. Caching write-back jauh lebih cepat daripada caching write-through, tetapi memerlukan cadangan baterai untuk pengontrol disk. Untuk penggunaan SQL Server, Anda ingin memastikan bahwa Anda menggunakan cache tulis-balik daripada cache tulis-melalui jika memungkinkan. Anda juga ingin memastikan cache disk perangkat keras Anda benar-benar diaktifkan, karena beberapa alat manajemen disk vendor menonaktifkannya secara default.

Operasi Input/Output per Detik (IOPS)

Metrik kedua adalah Input/Output Operations per Second (IOPS). Metrik ini terkait langsung dengan latensi. Misalnya, latensi konstan 1 md berarti drive dapat memproses 1.000 IO per detik dengan kedalaman antrean 1. Semakin banyak IO ditambahkan ke antrean, latensi akan meningkat. Salah satu keuntungan utama penyimpanan flash adalah dapat membaca/menulis ke beberapa saluran NAND secara paralel, bersama dengan fakta bahwa tidak ada bagian yang bergerak secara elektro-mekanis untuk memperlambat akses disk. IOPS sebenarnya sama dengan kedalaman antrian dibagi dengan latensi, dan IOPS dengan sendirinya tidak mempertimbangkan ukuran transfer untuk transfer disk individu. Anda dapat menerjemahkan IOPS ke MB/dtk dan MB/dtk ke latensi selama Anda mengetahui kedalaman antrean dan ukuran transfer.

Troughput Sekuensial

Throughput berurutan adalah kecepatan transfer data, biasanya diukur dalam megabyte per detik (MB/detik) atau gigabyte per detik (GB/detik). Metrik throughput berurutan Anda dalam MB/dtk sama dengan IOPS kali ukuran transfer. Misalnya, 556 MB/detik sama dengan 135.759 IOPS kali ukuran transfer 4096 byte, sedangkan 135.759 IOPS kali ukuran transfer 8192 byte akan menjadi 1112 MB/detik throughput berurutan. Terlepas dari pentingnya sehari-hari untuk SQL Server, throughput disk sekuensial sering berubah pendek dalam penyimpanan perusahaan, baik oleh vendor penyimpanan maupun oleh administrator penyimpanan. Ini juga sebenarnya cukup umum untuk melihat disk magnetik aktual di kandang penyimpanan langsung (DAS) atau perangkat jaringan area penyimpanan (SAN) menjadi sangat sibuk sehingga mereka tidak dapat memberikan throughput berurutan dengan nilai penuh.

Throughput berurutan sangat penting untuk banyak aktivitas server basis data umum, termasuk pencadangan dan pemulihan basis data lengkap, pembuatan dan pembuatan ulang indeks, dan pemindaian baca sekuensial tipe gudang data besar (ketika data Anda tidak sesuai dengan kumpulan buffer SQL Server). Salah satu tujuan kinerja yang ingin saya bidik pada pembuatan server database baru adalah memiliki setidaknya 1GB/dtk throughput berurutan untuk setiap huruf drive atau titik pemasangan. Memiliki tingkat kinerja ini (atau lebih baik) membuat hidup Anda jauh lebih mudah sebagai profesional database. Itu membuat banyak tugas database umum Anda menjadi lebih cepat, dan juga memberi Anda kebebasan untuk melakukan penyetelan indeks lebih sering saat Anda dapat membuat indeks pada tabel besar dalam hitungan detik atau menit, bukan jam.

Metrik Beban Kerja I/O SQL Server

Ketika datang ke SQL Server dan kinerja I/O, ada beberapa hal yang harus Anda ukur dan pantau dari waktu ke waktu. Anda harus mengetahui rasio baca vs. tulis untuk beban kerja Anda untuk semua file database pengguna dan untuk tempdb. Rasio akan berbeda untuk jenis file dan beban kerja SQL Server yang berbeda. Anda dapat menggunakan Kueri Diagnostik DMV saya untuk menentukan ini, dan Anda juga dapat menggunakan Tampilan Aktivitas Disk di SQL Sentry Performance Advisor untuk dengan mudah mendapatkan tampilan yang lebih lengkap dari aktivitas disk Anda, dari gambaran keseluruhan tingkat tinggi, hingga ke bawah. ke file individual:

Penasihat Kinerja SQL Sentry :Aktivitas Disk

Anda juga harus mengukur tarif I/O tipikal untuk IOPS dan throughput berurutan. Di Windows Performance Monitor (PerfMon), read/sec dan write/sec menunjukkan IOPS, sedangkan disk read byte/sec dan disk write byte/sec mewakili throughput berurutan. Anda harus menggunakan PerfMon untuk mengukur rata-rata disk sec/read dan rata-rata disk sec/write, yang membaca dan menulis latency pada tingkat disk. Terakhir, Anda dapat menggunakan Kueri Diagnostik DMV saya untuk mengukur latensi baca dan tulis tingkat file rata-rata untuk semua file database pengguna Anda serta untuk tempdb.

Metode untuk Mengukur Kinerja I/O

Anda dapat menggunakan bagian Disk di Windows Resource Monitor untuk mendapatkan tampilan real-time yang cepat dari beberapa metrik disk utama untuk semua file database SQL Server Anda. Lebih dalam, Anda dapat menggunakan PerfMon untuk mengukur dan memantau penghitung kinerja kritis yang telah saya sebutkan sebelumnya. Sebelum Anda masuk ke produksi dengan server database baru, Anda harus melakukan beberapa pengujian benchmark disk untuk menentukan jenis kinerja yang benar-benar dapat diberikan oleh subsistem I/O Anda. Ini sebenarnya tidak terlalu sulit atau memakan waktu (jika Anda menggunakan alat yang tepat), tetapi sering dilupakan ketika server database baru disediakan dan diuji.

Benchmark disk pertama yang harus selalu Anda jalankan adalah CrystalDiskMark 4.0, yang baru-baru ini telah ditulis ulang untuk menggunakan program benchmark disk Microsoft DiskSpd yang relatif baru. Antarmuka pengguna CDM 4.0 memungkinkan Anda memilih rentang ukuran file uji yang lebih luas dan juga memungkinkan Anda memilih kedalaman antrean dan jumlah utas untuk uji coba. Ini memungkinkan Anda mendapatkan lebih banyak beban kerja I/O seperti server dan juga memungkinkan Anda menekankan perangkat penyimpanan flash NVMe yang lebih baru yang dapat menangani kedalaman antrean lebih dari 32.

CrystalDiskMark 4.03 Hasil dengan QD =32 dan thread =1

Gambar 2:CrystalDiskMark 4.03 Hasil dengan QD =32 dan thread =4

Tidak seperti versi CDM sebelumnya, dua baris paling relevan untuk penggunaan SQL Server berada di tengah tampilan hasil. Mereka adalah 4K membaca dan menulis acak dengan kedalaman antrian tinggi (32 secara default), dan membaca dan menulis berurutan. Setelah Anda melakukan beberapa tes benchmark penyimpanan dengan CrystalDiskMark 4.0, Anda harus melakukan beberapa pengujian yang lebih lengkap dengan Microsoft DiskSpd. Di artikel mendatang, saya akan membahas cara menggunakan DiskSpd untuk melakukan pengujian SQL Server yang lebih lengkap.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Beberapa baris ke satu nilai yang dipisahkan koma di Sql Server

  2. Salin tabel ke database yang berbeda pada SQL Server yang berbeda

  3. Apakah mungkin mengakses database .mdf tanpa SQL Server?

  4. Tidak ada kebuntuan SQL berdasarkan desain - ada pola pengkodean?

  5. Konversi nilai teks di SQL Server dari UTF8 ke ISO 8859-1