Kami memiliki file data pengguna dan sistem pada drive disk yang sama. (Io_stall_write_ms / (1.0 + num_of_writes)) di bawah 2 untuk file pengguna tetapi file tempdb biasanya lebih dari 400. Saya melihat itu pada beberapa server dan saya ingin tahu apakah ada alasan untuk menulis ke tempdb lebih lama dari file data database biasa.
SELECT DISTINCT UPPER(LEFT(mf.physical_name, 1)) AS Directory,
( io_stall_write_ms / ( 1.0 + num_of_writes ) ) as result,
io_stall_write_ms, num_of_writes,
fs.database_id,
fs.[file_id]
FROM sys.dm_io_virtual_file_stats(NULL, NULL) AS fs
INNER JOIN sys.master_files AS mf ON fs.database_id = mf.database_id
AND fs.[file_id] = mf.[file_id]
Terima kasih,
Jawaban:
Jawaban Singkat: Melihat kedai IO yang lebih tinggi mungkin atau mungkin tidak menjadi masalah dalam dirinya sendiri. Anda perlu melihat informasi lebih lanjut untuk menyelesaikan jika Anda memiliki masalah. Tampaknya memang agak tinggi, tetapi apakah Anda menderita? Jika demikian, itu mungkin karena sistem IO Anda tidak menangani beban dengan benar (karena tidak bisa, karena Anda memiliki semuanya di satu drive atau alasan lain) atau Anda melakukan terlalu banyak di TempDB (mengubah masalah pertama - kinerja IO - mungkin merupakan perbaikan yang lebih mudah dan lebih efisien, tetapi pertama-tama tentukan jika Anda memiliki masalah)
Diskusi / jawaban yang lebih panjang:
Ada dua pertanyaan yang dimainkan di sini -
1.) Apa yang harus saya lakukan ketika saya melihat Warung IO tinggi?
Pertama, "tinggi" ada di mata yang melihatnya. Jika Anda bertanya kepada 10 DBA apa "terlalu tinggi" untuk warung IO Anda mungkin akan mendapatkan 2-3 jawaban berbeda dengan angka di dalamnya, 5-6 jawaban "Itu tergantung" dan satu tatapan kosong. Asumsi saya adalah rata-rata 400 ms berpotensi terlalu tinggi di sini, terutama ketika DB lain 2ms atau lebih rendah untuk waktu tunda rata-rata.
Terlepas dari database mana yang melihat warung tinggi, Anda harus mendekatinya dengan cara yang sama. Kios IO adalah seperti apa itu ... Permintaan IO memakan waktu lebih lama dari yang diharapkan .. Mengulur. Ini terjadi. Mereka terjadi setiap saat dalam suatu sistem dengan sumber daya dibagikan dan sumber daya terbatas (benar-benar semua sistem kami). Mereka menjadi masalah ketika kios menjadi masalah kinerja atau menyebabkan mereka. Jadi saya percaya bahwa Anda melihat di sini sebagai bagian proaktif dari pemantauan atau karena Anda mengalami masalah kinerja yang Anda selesaikan. Kami juga tidak ingin tersesat hanya di warung IO. Kami melihat potongan puzzle dan bukan gambaran besarnya. Mungkin merepotkan untuk hanya melihat statistik menunggu atau statistik file karena SQL terakhir kali dinyalakan kembali karena Anda melihat setiap saat dan beberapa jendela pemeliharaan atau jendela beban berat dapat membuat konter miring. Jadi pastikan Anda melihat gambar lengkapnya.
Tetapi ketika saya menduga saya memiliki masalah kinerja disk atau melihat sesuatu dalam kueri seperti ini, saya biasanya mengikuti proses yang terlihat seperti:
PAGEIOLATCH_*
,IO_COMPLETION
,WRITELOG
, dll?). Jika Anda melakukan ini adalah indikasi lain bahwa Anda memiliki beberapa masalah kinerja terkait IO, seperti halnya kios IO. Tapi itu memberi Anda bentuk perjanjian lain di sini.Physical Disk:Avg Disk Sec/Read
danAvg Sec Disk Sec/Write
counter. Ini mengukur latensi Anda. Tonton penghitung ini selama periode waktu yang disimpan ke file log kinerja. Apa yang Anda lihat rata-rata? Jika Anda melihat angka lebih dari 0,020 detik (20 ms) ini bisa menjadi masalah. Jika Anda melihat angka lebih dari 40-50ms, rata-rata atau lebih tinggi merupakan indikasi masalah yang lebih jelas. Juga lihat paku Anda? Seberapa tinggi mereka pergi dan berapa lama mereka bertahan? Jika Anda melihat lonjakan ke dalam ratusan ms dan mereka bertahan selama puluhan atau skor detik atau lebih dan / atau sering terjadi Anda lebih cenderung memiliki masalah dengan kinerja IO Anda untuk beban kerja Anda.( Catatan: untuk analisis statistik tunggu ini dan analisis perfmon - lihat berbagai periode dan jenis penggunaan. Apakah Anda memiliki statistik penggunaan yang berbeda di malam hari daripada yang Anda lakukan di siang hari? Jendela pemrosesan batch? Jendela perawatan di mana Anda membangun kembali banyak indeks? Lihatlah alat-alat ini selama masing-masing periode ini dan pahami apa yang Anda lihat untuk masing-masing periode)
Pertimbangan kinerja IO lain di sini -
2.) Apa beberapa alasan TempDB bisa lebih tinggi?
Jadi TempDB adalah database dan dapat memiliki warung IO seperti database lain seperti yang baru saja saya bahas. Tapi apa saja alasan TempDB bisa membaca lebih tinggi? (tidak lengkap, saya menyambut penambahan atau pemikiran dalam suntingan, jawaban atau komentar lain) -
Intinya adalah - TempDB digunakan dalam banyak cara, dan tidak mengejutkan saya sama sekali untuk melihatnya sebagai salah satu basis data tersibuk Anda, jika bukan yang tersibuk. Itu juga tidak mengejutkan saya ketika saya melihatnya memiliki jumlah kios rata-rata tertinggi dan tertinggi dari semua basis data di situs klien. Ini adalah sifat dari beban kerjanya kadang-kadang. Melihat beberapa hal yang saya sebutkan di sini tentu dapat membantu Anda menentukan apakah angka-angka ini menunjukkan masalah dan jika demikian, bagaimana cara lebih dalam menyelesaikannya.
sumber
TempDB dibagikan di antara semua database pada instance. Jadi kadang-kadang bisa ada pertengkaran dalam TempDB untuk halaman-halaman tertentu: SGAM , GAM , dan PFS . Singkatnya, halaman-halaman ini melacak apa yang telah digunakan di TempDB sejauh ini, dan di mana ruang tersedia untuk penggunaan baru.
Biasanya, ini ditangani dengan menambahkan beberapa file data ke TempDB. Ada beberapa filosofi yang berbeda mengenai jumlah yang benar, tetapi semua setuju Anda harus memiliki lebih dari satu.
Berikut beberapa pertanyaan untuk dijalankan ...
Yang ini akan menunjukkan kepada Anda berapa banyak file yang dimiliki TempDB dan di mana mereka berada.
Yang ini akan menunjukkan berapa banyak CPU dan core yang Anda miliki.
Yang ini akan menunjukkan kepada Anda berapa banyak NUMA simpul dan inti per NUMA simpul yang Anda miliki.
Yang ini akan menunjukkan kepada Anda halaman mana yang sedang menunggu di TempDB.
Berikut adalah artikel yang sedikit lebih mendalam tentang masalah pertikaian halaman.
OK, jadi sekarang bagian filosofi ... :-)
Bagi saya sendiri, jika saya menggunakan sistem SMP , saya hanya ingin file sebanyak setengah dari total core .
Jika saya menggunakan sistem NUMA , maka saya hanya ingin file sebanyak core per node NUMA .
Namun, saya jarang melihat peningkatan karena memiliki lebih dari empat file untuk TempDB. Jadi saya biasanya mulai dengan empat dan memonitor pertengkaran seperti yang dijelaskan dalam artikel yang saya tautkan.
Jika saya terus melihat masalah, maka saya akan menambahkan dua lagi. Periksa lagi, tambahkan lagi, dan ulangi sampai pertengkaran hilang.
sumber