Pada Produksi SQL Server, kami memiliki konfigurasi berikut:
3 Server Dell PowerEdge R630, digabungkan ke dalam Grup Ketersediaan. Semua 3 terhubung ke unit penyimpanan Dell SAN tunggal yang merupakan array RAID
Dari waktu ke waktu, pada PRIMARY kami melihat pesan yang mirip dengan di bawah ini:
SQL Server telah mengalami 11 kali permintaan I / O yang membutuhkan waktu lebih dari 15 detik untuk diselesaikan pada file [F: \ Data \ MyDatabase.mdf] di database id 8.
Pegangan file OS adalah 0x0000000000001001FBC.
Offset dari I / O panjang terbaru adalah: 0x000004295d0000.
Durasi I / O yang panjang adalah: 37397 ms.
Kami pemula dalam pemecahan masalah kinerja
Apa cara paling umum atau praktik terbaik dalam mengatasi masalah masalah khusus ini terkait dengan penyimpanan? Penghitung kinerja, alat, monitor, aplikasi, dll. Apa yang harus digunakan untuk mempersempit akar penyebab dari pesan seperti itu? Mungkinkah ada Acara yang Diperpanjang yang dapat membantu, atau semacam audit / logging?
sumber
Jawaban:
Kami memiliki pengaturan serupa dan baru-baru ini menemukan pesan-pesan ini di log. Kami menggunakan DELL Compellent SAN. Berikut adalah beberapa hal yang perlu diperiksa ketika menerima pesan-pesan ini yang membantu kami menemukan solusi
sys.dm_io_virtual_file_stats
. Dalam kasus kami, latensi rata-rata yang dilaporkan dapat diterima, tetapi di bawah sampul kami memiliki banyak file dengan latensi rata-rata> 200 ms.Solusi kami adalah memutakhirkan sakelar kami ke sakelar SAN. Ya, ini adalah semua poin untuk dibahas dalam SQL Server. Apa yang membuat kami menemukan itu adalah bahwa kami menerima sekitar 1500 kesalahan putuskan pdu iSCSI di penampil acara aplikasi Windows di SQL Server setiap hari. Itu mendorong penyelidikan oleh admin SAN kami ke sakelar.
Segera setelah peningkatan, kesalahan iSCSI hilang dan rata-rata latensi turun menjadi sekitar 50 ms untuk semua file, dan itu berkorelasi dengan kinerja yang lebih baik dalam aplikasi. Dengan mengingat hal-hal ini mudah-mudahan Anda dapat menemukan solusi Anda.
sumber
Ini jauh lebih jarang masalah disk, dan jauh lebih sering masalah jaringan. Anda tahu, N di SAN?
Jika Anda pergi ke tim SAN Anda dan mulai berbicara tentang disk yang lambat, mereka akan menunjukkan kepada Anda grafik mewah dengan 0 milidetik latensi di atasnya dan kemudian arahkan stapler pada Anda.
Sebaliknya, tanyakan tentang jalur jaringan ke SAN. Dapatkan kecepatan, jika multipathing, dll. Dapatkan angka dari mereka tentang kecepatan yang seharusnya Anda lihat. Tanyakan apakah mereka memiliki tolok ukur sejak server disiapkan.
Kemudian Anda dapat menggunakan Crystal Disk Mark atau diskpd untuk memvalidasi kecepatan tersebut. Jika mereka tidak berbaris, sekali lagi, kemungkinan besar jaringan.
Anda juga harus mencari log kesalahan Anda untuk pesan yang berisi "FlushCache" dan "saturation", karena itu juga bisa menjadi tanda pertentangan jaringan.
Satu hal yang dapat Anda lakukan untuk menghindari hal-hal itu sebagai DBA adalah memastikan bahwa pemeliharaan Anda dan tugas berat data lainnya (seperti ETL) tidak terjadi pada saat yang bersamaan. Itu pasti dapat memberi banyak tekanan pada jaringan penyimpanan.
Anda mungkin juga ingin memeriksa jawaban di sini untuk saran lebih lanjut: Pos pemeriksaan lambat dan peringatan I / O 15 detik pada penyimpanan flash
Saya membuat blog tentang topik serupa di sini: Dari Server Ke SAN
sumber
Mengapa menyimpan data pada SAN? Apa gunanya? Semua kinerja basis data terkait dengan Disk I / O dan Anda menggunakan 3 server dengan hanya satu perangkat untuk I / O di belakangnya. Itu tidak masuk akal ... dan sayangnya sangat umum.
Saya menghabiskan hidup saya menghadapi platform perangkat keras yang dirancang buruk di mana orang hanya mencoba untuk merancang komputer skala besar. Semua kekuatan CPU di sini, semua disk di sana ... semoga tidak ada yang namanya RAM jarak jauh. Dan yang paling menyedihkan adalah mereka mengkompensasi kurangnya efisiensi dari desain ini dengan server besar yang harganya sepuluh kali lebih banyak dari yang seharusnya. Saya melihat infra $ 400k lebih lambat dari laptop $ 1k.
Perangkat lunak SQL server adalah perangkat lunak yang sangat canggih, dirancang untuk memanfaatkan setiap bit perangkat keras, inti CPU, cache CPU, TLB, RAM, pengontrol disk, cache hard drive ... Mereka hampir mencakup semua logika sistem file. Mereka dikembangkan pada komputer biasa dan mengacu pada sistem kelas atas. Karena itu server SQL harus memiliki disk sendiri. Menginstalnya di SAN seperti "meniru" komputer, Anda kehilangan semua optimisasi kinerja. SAN adalah untuk menyimpan cadangan, file yang tidak dapat diubah, dan file yang baru saja Anda tambahkan data (log).
Administrator pusat data cenderung meletakkan semua yang mereka bisa di SAN karena cara ini mereka hanya memiliki satu kumpulan penyimpanan untuk dikelola, lebih mudah daripada merawat penyimpanan di setiap server. Ini adalah pilihan "Saya tidak ingin melakukan pekerjaan saya", dan pilihan yang sangat buruk, karena mereka harus berurusan dengan masalah kinerja dan semua perusahaan menderita karenanya. Cukup instal perangkat lunak pada perangkat keras yang dirancang untuk itu. Tetap sederhana. Peduli I / O bandwidth, cache dan konteks switch overhead, ressource jitter (terjadi ketika ressource dibagikan). Anda pada akhirnya akan mempertahankan 1/10 perangkat untuk daya output mentah yang sama, menghemat banyak sakit kepala tim ops Anda, mendapatkan kinerja yang membuat pengguna akhir Anda bahagia dan lebih produktif, menjadikan perusahaan Anda tempat yang lebih baik untuk bekerja, dan menghemat banyak energi (planet ini akan berterima kasih).
Anda mengatakan dalam komentar, Anda mempertimbangkan untuk menempatkan SSD di server Anda. Anda tidak akan mengenali pengaturan Anda dengan SSD khusus, dibandingkan dengan SAN Anda akan mendapatkan peningkatan 500x bahkan dengan data dan file log transaksi pada drive yang sama. Keadaan SQL Server akan memiliki SSD terpisah cepat untuk data dan transaksi log pada saluran pengontrol perangkat keras yang berbeda (kebanyakan server motherboard memiliki beberapa). Tetapi dibandingkan dengan pengaturan Anda saat ini, kita berbicara tentang sci-fi di sana. Coba saja SSD.
sumber
Oke, untuk siapa saja yang tertarik,
Kami memecahkan masalah di Pertanyaan beberapa bulan yang lalu hanya dengan menginstal drive SSD yang terpasang langsung ke masing-masing dari 3 server, dan memindahkan data DB dan mencatat file dari SAN ke drive SSD tersebut
Berikut ringkasan tentang apa yang saya lakukan untuk meneliti masalah ini (menggunakan rekomendasi dari semua posting, pertanyaan ini), sebelum kami memutuskan untuk menginstal drive SSD:
Disk F:
adalah disk logis berdasarkan SAN, berisi file data MDFDisk I:
disk logis berdasarkan SAN, berisi file log LDFDisk T:
yang langsung terpasang SSD, didedikasikan hanya untuk tempDBGambar di bawah ini adalah nilai rata-rata yang dikumpulkan selama periode 2 minggu
Disk I: (LDF)
memiliki IO yang sangat kecil dan Latency sangat rendah, jadi Disk I: dapat diabaikanAnda dapat melihat bahwa
Disk T: (TempDB)
IO lebih besar dibandingkan denganDisk F: (MDF)
, dan memiliki Latensi yang jauh lebih baik pada saat yang sama - 0 msJelas ada sesuatu yang salah dengan Disk F: di mana file data berada, ia memiliki Latensi tinggi dan Rta Tulis Disk Antrian, meskipun IO rendah
https://www.brentozar.com/blitz/slow-storage-reads-writes/
Beberapa basis data aktif di server Utama memiliki latensi baca 150-250 ms dan latensi tulis 150-450 ms
Yang menarik, file basis data master dan msdb telah membaca latensi hingga 90 ms yang mencurigakan mengingat kecilnya data dan rendahnya IO - indikasi lain ada yang salah dengan SAN
Selama yang "SQL Server telah mengalami kejadian ..." pesan muncul
Tidak ada pemeliharaan atau disk yang tinggi ETL berjalan ketika pesan-pesan yang login
Tidak menunjukkan entri lain yang akan mengisyaratkan masalah, kecuali "SQL Server telah mengalami kejadian ..."
Dari sp_BlitzCache (cpu, membaca, dll.), Dan mempercepat jika mungkin
Tidak ada super IO pertanyaan berat yang akan mengocok banyak data dan berdampak besar pada penyimpanan, meskipun
pengindeksan dalam basis data tidak masalah, saya mempertahankannya
Kami hanya memiliki 1 sysadmin yang membantu pada kesempatan
Network path ke SAN - multipathed, masing-masing dari 3 server memiliki 2 kabel jaringan yang mengarah ke switch dan kemudian ke SAN, dan seharusnya 1 Gigabyte / detik
Atau hasil uji benchmark lainnya dari ketika server yang pengaturan, jadi saya tidak tahu apa kecepatan harus menjadi, dan tidak mungkin untuk patokan pada saat ini untuk melihat apa kecepatan saat ini adalah, karena akan berdampak Produksi
Sesi XE membantu menemukan bahwa selama pesan "SQL Server mengalami kejadian ...", pos pemeriksaan terjadi sangat lambat (hingga 90 detik)
Entri "FlushCache" "Saturasi" yang terkandung
Ini seharusnya muncul ketika waktu pos pemeriksaan untuk database yang diberikan melebihi pengaturan interval pemulihan
Detail menunjukkan bahwa jumlah data yang ingin diperiksa oleh checkpoint kecil dan butuh waktu lama untuk menyelesaikannya, dan kecepatan keseluruhannya sekitar 0,25 MB / detik ... aneh
Tampaknya kita hanya memiliki "Masalah Perangkat Keras: - Bekerja dengan admin sistem / vendor perangkat keras untuk memperbaiki kesalahan konfigurasi SAN, driver lama / rusak, pengontrol, firmware, dll."
Dalam pertanyaan lain "Lambat periksa ..." Lambat periksa dan 15 I peringatan I / O pada penyimpanan flash Sean memiliki daftar yang sangat bagus dari item apa yang harus diperiksa pada tingkat perangkat keras dan perangkat lunak untuk memecahkan masalah
Sysadmin kami tidak dapat memeriksa semua hal dari daftar, jadi kami hanya memilih untuk membuang beberapa perangkat keras pada masalah ini - itu tidak mahal sama sekali
Kami memesan drive SSD 1 TB dan dipasang langsung ke server
Karena kami memiliki Grup yang Tersedia, memigrasikan file data DB dari SAN ke SSD pada replika sekunder, kemudian gagal, dan memigrasikan file pada mantan primer. Ini memungkinkan untuk total downtime minimum - kurang dari 1 menit
Sekarang setiap server memiliki salinan data DB lokal, dan pencadangan penuh / diff / log dilakukan ke SAN yang disebutkan di atas.
Tidak ada lagi pesan "SQL Server telah mengalami kejadian ..." di log Windows Event Viewer, dan kinerja cadangan, pemeriksaan integritas, indeks membangun kembali, permintaan dll telah meningkat secara signifikan
Untuk mengevaluasi dampak, kinerja yang digunakan log Monitor Kinerja Windows 2 minggu sebelum migrasi dan 4 minggu setelah migrasi:
Juga di bawah ini adalah perbandingan statistik latensi tingkat DB (digunakan statistik file virtual yang ditangkap SQL Server sebelum dan sesudah migrasi)
Migrasi dari SAN ke SSD lokal yang terpasang langsung sangat bermanfaat.
Itu berdampak besar pada latensi penyimpanan dan meningkat rata-rata lebih dari 90% (terutama operasi WRITE), dan kami tidak memiliki lonjakan 20-50 detik di IO lagi
Pindah ke SSD lokal menyelesaikan tidak hanya masalah kinerja penyimpanan tetapi juga keamanan data yang saya khawatirkan (jika SAN gagal, ketiga server kehilangan data mereka pada saat yang sama)
sumber