Desain disk SQL Server pada SAN ISCSI


27

Praktik standarnya untuk memisahkan file log dan data untuk memisahkan disk dari OS (tempdb, backup, dan swap file). Apakah logika ini masih masuk akal ketika semua drive Anda berbasis SAN dan LUNS Anda tidak diukir pada set disk atau raid tertentu -mereka hanya bagian dari jumlah x drive pada SAN dan LUN hanya alokasi ruang

Jawaban:


37

Log dan drive data memiliki pola akses data yang berbeda yang bertentangan satu sama lain (setidaknya secara teori) saat mereka berbagi drive.

Menulis Log

Akses log terdiri dari sejumlah besar penulisan sekuensial kecil. Secara sederhana, log DB adalah buffer cincin yang berisi daftar instruksi untuk menulis item data ke lokasi tertentu pada disk. Pola akses terdiri dari sejumlah besar penulisan sekuensial kecil yang harus dijamin selesai - sehingga ditulis ke disk.

Idealnya, log harus dalam volume yang tenang (mis. Tidak dibagikan dengan yang lain) RAID-1 atau RAID-10. Secara logis, Anda dapat melihat proses sebagai DBMS utama yang menulis entri log dan satu atau lebih utas pembaca log yang menggunakan log dan menulis perubahan ke disk data (dalam praktiknya, proses ini dioptimalkan sehingga penulisan data dituliskan segera keluar jika memungkinkan). Jika ada lalu lintas lain pada log disk, kepala dipindahkan oleh akses lain ini dan menulis log berurutan menjadi menulis log acak. Ini jauh lebih lambat, jadi disk log yang sibuk dapat membuat hotspot yang bertindak sebagai hambatan pada keseluruhan sistem.

Menulis data

(Diperbarui) Penulisan log harus dilakukan ke disk (disebut media stabil) agar transaksi valid dan memenuhi syarat untuk dikomit. Orang dapat secara logis melihat ini sebagai entri log yang sedang ditulis dan kemudian digunakan sebagai instruksi untuk menulis halaman data ke disk dengan proses asinkron. Dalam prakteknya halaman disk menulis sebenarnya disiapkan dan buffer pada saat entri log dibuat, tetapi mereka tidak perlu dituliskan segera untuk transaksi yang akan dilakukan. Buffer disk ditulis ke media stabil (disk) oleh proses Lazy Writer (Terima kasih kepada Paul Randal untuk menunjukkan ini) yang dibahas dalam artikel Technet ini sedikit lebih detail.

Ini adalah pola akses yang sangat acak, sehingga berbagi disk fisik yang sama dengan log dapat membuat hambatan buatan pada kinerja sistem. Entri log harus ditulis agar transaksi dapat dilakukan, sehingga memiliki pencarian acak memperlambat proses ini (I / O acak jauh lebih lambat daripada log berurutan I / O) akan mengubah log dari sekuensial menjadi perangkat akses acak. Ini menciptakan hambatan kinerja yang serius pada sistem yang sibuk dan harus dihindari. Hal yang sama berlaku ketika berbagi area sementara dengan volume log.

Peran caching

Pengontrol SAN cenderung memiliki cache RAM yang besar, yang dapat menyerap lalu lintas akses acak hingga batas tertentu. Namun, untuk integritas transaksional, diinginkan untuk menulis disk dari DBMS yang dijamin lengkap. Ketika pengontrol diatur untuk menggunakan cache tulis-kembali, blok-blok yang kotor di-cache dan panggilan I / O dilaporkan selesai ke host.

Ini dapat memuluskan banyak masalah pertengkaran karena cache dapat menyerap banyak I / O yang seharusnya keluar ke disk fisik. Itu juga dapat mengoptimalkan paritas membaca dan menulis untuk RAID-5, yang mengurangi efek pada kinerja yang memiliki volume RAID-5.

Ini adalah karakteristik yang mendorong aliran pemikiran 'Biarkan SAN menghadapinya', meskipun pandangan ini memiliki beberapa keterbatasan:

  • Cache Write-back masih memiliki mode kegagalan yang dapat kehilangan data, dan controller telah bersatu ke DBMS, mengatakan blok telah ditulis ke disk di mana sebenarnya mereka belum. Untuk alasan ini, Anda mungkin tidak ingin menggunakan cache tulis-balik untuk aplikasi transaksional, terutama sesuatu yang menyimpan data mission-critical atau keuangan di mana masalah integritas data dapat memiliki konsekuensi serius bagi bisnis.

  • SQL Server (khususnya) menggunakan I / O dalam mode di mana bendera (disebut FUA atau Akses Pembaruan Paksa) memaksa penulisan fisik ke disk sebelum panggilan kembali. Microsoft memiliki program sertifikasi dan banyak vendor SAN menghasilkan perangkat keras yang menghormati semantik ini (persyaratan dirangkum di sini ). Dalam hal ini tidak ada jumlah cache yang akan mengoptimalkan penulisan disk, yang berarti bahwa lalu lintas log akan gagal jika duduk pada volume bersama yang sibuk.

  • Jika aplikasi menghasilkan banyak lalu lintas disk yang set kerjanya dapat menyerbu cache, yang juga akan menyebabkan masalah pertentangan penulisan.

  • Jika SAN digunakan bersama dengan aplikasi lain (khususnya pada volume disk yang sama), lalu lintas dari aplikasi lain dapat menghasilkan kemacetan log.

  • Beberapa aplikasi (mis. Gudang data) menghasilkan lonjakan beban transien besar yang membuatnya sangat anti-sosial pada SAN.

Bahkan pada volume log terpisah SAN yang besar masih disarankan. Anda mungkin tidak perlu khawatir tentang tata letak pada aplikasi yang sedikit digunakan. Pada aplikasi yang sangat besar, Anda bahkan dapat memperoleh manfaat dari beberapa pengontrol SAN. Oracle menerbitkan serangkaian studi kasus tata letak gudang data di mana beberapa konfigurasi yang lebih besar melibatkan banyak pengontrol.

Tanggung jawab atas kinerja di mana tempatnya

Pada sesuatu dengan volume besar atau di mana kinerja dapat menjadi masalah, buat tim SAN bertanggung jawab atas kinerja aplikasi. Jika mereka akan mengabaikan rekomendasi Anda untuk konfigurasi, maka pastikan bahwa manajemen mengetahui hal ini dan bahwa tanggung jawab untuk kinerja sistem berada di tempat yang tepat. Secara khusus, buat pedoman yang dapat diterima untuk statistik kinerja utama DB seperti I / O menunggu atau menunggu halaman latch atau I / O SLA aplikasi yang dapat diterima.

Perhatikan bahwa memiliki tanggung jawab untuk pemisahan kinerja di beberapa tim menciptakan insentif untuk titik-jari dan meneruskan tanggung jawab kepada tim lain. Ini adalah anti-pola manajemen yang dikenal dan formula untuk masalah yang keluar selama berbulan-bulan atau bertahun-tahun tanpa pernah diselesaikan. Idealnya, harus ada satu arsitek dengan wewenang untuk menentukan perubahan aplikasi, database, dan konfigurasi SAN.

Juga, patok sistem di bawah beban. Jika Anda dapat mengaturnya, server bekas dan array pemasangan langsung dapat dibeli dengan cukup murah di Ebay. Jika Anda mengatur kotak seperti ini dengan satu atau dua array disk, Anda dapat menggunakan konfigurasi disk fisik dan mengukur efeknya pada kinerja.

Sebagai contoh, saya telah melakukan perbandingan antara aplikasi yang berjalan pada SAN besar (IBM Shark) dan kotak dua-soket dengan lampirkan U320 array langsung. Dalam hal ini, perangkat keras senilai £ 3.000 yang dibeli dari ebay mengungguli SAN high-end £ 1 juta dengan faktor dua - pada host dengan konfigurasi CPU dan memori yang kira-kira setara.

Dari kejadian khusus ini, dapat dikatakan bahwa memiliki sesuatu seperti ini adalah cara yang sangat baik untuk menjaga administrator SAN jujur.


Apakah itu cut'n'paste atau JAWABAN TERBAIK YANG PERNAH DI SERVERFAULT !!!!!! :)
Chopper3

Tidak, saya hanya mengetik cepat; -}
ConcernedOfTunbridgeWells

Kamulah orangnya.
squillman

3
Kebetulan membaca ini dari tautan yang Anda masukkan ke jawaban lain. Bagian dari jawaban Anda salah "Item data ditulis ke disk data oleh pembaca log. Ini mengkonsumsi entri log dan menulis item data ke disk." Penulisan halaman data dilakukan oleh pos pemeriksaan dan proses lazy-writer di buffer pool, dan tidak ada hubungannya sama sekali dengan proses pembaca log. Menulis halaman data juga tidak menghasilkan catatan log.
Paul Randal

Terlihat dengan baik. Saya telah memperbarui artikel untuk memperbaikinya.
ConcernedOfTunbridgeWells

9

Saya berasumsi bahwa tag Equallogic dan konten dari permintaan berarti bahwa Anda sedang memikirkan tentang SAN Equallogic. Berikut ini secara khusus tentang Equallogic dan tidak berlaku untuk tipe SAN lainnya.

Dengan array Equallogic disk spesifik yang digunakan untuk volume tidak dapat ditentukan setepat mungkin dengan, katakanlah, array EMC Clariion sehingga pendekatannya harus sedikit berbeda.

Arsitektur equallogic sangat otomatis dan dinamis. Blok pembangun dasarnya adalah unit array bukan RAID packs \ groups dalam array seperti yang terlihat pada SAN lainnya. Setiap array sepenuhnya dikonfigurasi untuk RAID 5, 6, 10 atau 50 meskipun ini tidak menyiratkan bahwa hanya ada satu grup RAID per array, Anda hanya tidak pernah bisa memutuskan atau berinteraksi dengan mereka di tingkat itu. Anda memasukkan array ke dalam kolam Penyimpanan dan kolam Anda kemudian menjadi milik Grup Penyimpanan. Storage Group memiliki cluster \ virtual ip-address yang Anda gunakan sebagai target iSCSI Discovery untuk semua volume di dalam grup itu - perangkat lunak manajemen EQL Group dan host MPIO stack menangani level rediredection yang diperlukan untuk benar-benar merutekan ke port yang paling sesuai di array individu ketika meminta blok data tetapi itu adalah sesuatu yang Anda memiliki sedikit atau tidak ada kemampuan untuk mengontrol.

Volume penyimpanan ditetapkan dari total ruang kosong di setiap kelompok. Semua volume di dalam kumpulan tersebar di semua array di kumpulan itu (hingga maksimal 4 array terpisah) untuk mendistribusikan IO jaringan di seluruh jumlah antarmuka jaringan (2-4 per array Eql tergantung pada model) dan IO melintasi sebanyak mungkin pengontrol. Perangkat lunak manajemen Equallogic memonitor kinerja volume \ array dari waktu ke waktu dan secara dinamis mengoptimalkan distribusi blok di seluruh array anggota. Secara umum, kecuali jika Anda tahu apa yang Anda lakukan, Anda harus meletakkan semua array dalam satu kolam dan membiarkannya melakukan hal itu hanya ingat untuk memastikan bahwa Anda mengkonfigurasi disk kecepatan tinggi Anda (SAS 10k \ 15k) dengan RAID 10, kecepatan sedang dengan RAID 50 atau 5 untuk memastikan bahwa proses optimasi benar-benar memilih drive berkinerja tinggi yang sebenarnya.

Untuk perkiraan kasar, Anda akan memiliki suatu tempat antara 2500-5000 IOP per array PS tergantung pada jenis drive dan jenis RAID. Jika Anda memberikan total TIO yang cukup maka proses manajemen otomatis pada akhirnya akan memberi Anda kinerja yang baik bahkan jika Anda hanya mengelompokkan semua volume menjadi satu kumpulan.

Namun jika Anda ingin memastikan bahwa log, basis data, penyimpanan temporer, drive OS, dll sebenarnya saling terisolasi, Anda dapat melakukan beberapa hal. Pertama, Anda dapat menentukan preferensi RAID untuk volume yang akan menjamin bahwa volume spesifik selalu disimpan hanya pada array jenis RAID itu (jika mereka ada di kumpulan volume milik). Kedua, Anda dapat menentukan kolam penyimpanan berjenjang yang hanya berisi array yang memberikan berbagai tingkat kinerja yang Anda butuhkan untuk tingkat tertentu dan kemudian mendistribusikan volume Anda ke kolam yang sesuai. Peringatan kesehatan yang datang dengan pendekatan ini adalah bahwa Anda umumnya akan membutuhkan banyak array untuk ini untuk benar-benar memberikan kinerja keseluruhan yang lebih baik - yang mungkin kurang penting bagi Anda daripada menjamin kinerja pada volume kritis Anda meskipun begitu sering kali masih yang terbaik pilihan. Arsitektur referensi Dell untuk Oracle DB menggunakan satu kumpulan dengan 2 RAID 10 array untuk Data, Voting disk dan OCR, dan kumpulan terpisah dengan array RAID 5 tunggal untuk Area Pemulihan Flash.

Di semua titik waktu dengan Equallogic Anda harus bertanya pada diri sendiri apakah keputusan yang Anda buat sehubungan dengan partisi yang dipaksakan akan memberikan kinerja agregat yang lebih baik untuk volume Anda dalam hal antarmuka jaringan yang tersedia, poros disk, dan pengontrol. Jika Anda tidak dapat menjawabnya maka pilihlah jumlah kolam minimum dan biarkan itu menangani detailnya atau mintalah spesialis Equallogic untuk melakukan desain nyata. Jika Anda hanya memiliki satu array maka tidak ada yang dapat Anda lakukan dalam hal memisahkan volume.


5

Kami menyimpan DB kami pada kotak SAN tunggal tetapi dengan data terpisah, log, dan LUN cadangan, masing-masing pada kelompok disk yang berbeda, berjenjang dengan kecepatan - dengan log kami pada LUN RAID 10 15Krpm, data pada LUN RAID 1 10/15 krpm dan cadangan ke RAID 5 7.2krpm LUN. Kami juga menyajikan log dan data melalui pengontrol yang berbeda di SAN yang sama.


4

Pertanyaan bagus!

Pertama-tama lihat debat "Steel Cage BlogMatch" karya Brent Ozar tentang masalah ini.

Di perusahaan kami, untuk sebagian besar server, kami meletakkan Data dan Log pada drive SAN yang sama, dan menyerahkannya kepada tim SAN untuk memastikan semuanya berfungsi dengan baik.

Saya mulai berpikir ini bukan strategi terbaik, terutama untuk server dengan volume yang lebih tinggi. Masalah mendasarnya adalah bahwa saya benar-benar tidak memiliki cara untuk memverifikasi bahwa tim SAN benar-benar melakukan apa pun selain menampar drive yang cukup untuk ruang yang kita butuhkan. Kami tidak menjalankan tolok ukur IO terhadap drive SAN dari pihak kami atau apa pun, kami hanya berasumsi bahwa mereka "melakukan pekerjaan mereka" (menyesuaikan kinerja serta ruang), yang mungkin agak naif.

Pikiran saya yang lain adalah bahwa jenis akses yang dibutuhkan data vs log berbeda. Saya akan mencoba untuk menemukan artikel yang saya baca baru-baru ini yang berbicara tentang bagaimana dua tipe drive yang berbeda benar-benar harus dioptimalkan dengan cara yang sangat berbeda (saya pikir satu diperlukan optimasi untuk menulis berurutan, yang lain diperlukan optimasi untuk membaca acak, sesuatu seperti itu .)


4

Singkatnya, ya, Anda akan membuat volume terpisah untuk file data SQL Server, file log, dan data TempDB dan file log.

Karena Anda menandai pertanyaan Anda dengan Equallogic, harap baca Panduan Arsitektur Referensi Dell gratis : Menyebarkan Microsoft® SQL Server® dengan Array Penyimpanan Seri Dell ™ EqualLogic ™ PS5000 Series (diperlukan pendaftaran) sebelum merancang solusi Anda. Seringkali Anda akan menemukan bahwa panduan tentang konfigurasi spesifik dapat berbeda secara signifikan dari saran umum .


3

Saya setuju dengan BradC (+1) dalam hal kinerja. Secara umum, SAN yang baik akan memiliki I / O lebih mentah daripada yang Anda harapkan untuk digunakan.

Itu masih merupakan ide yang baik untuk memisahkan CADANGAN Anda dari sistem live Anda (Jelas saya tahu, tetapi jika saya memiliki £ 1 untuk setiap kali saya melihat ini ...)

Juga disarankan untuk menjauhkan tempdb dari file log. Tenda SAN guy untuk mengarahkan pandangan kepada Anda ketika Anda mulai menginginkan "ember berbeda" (istilah teknis) untuk Log, Data, dan Temp, tetapi jika Anda memberi tahu mereka, maka Anda dapat mengukur jumlah data IO yang berbeda untuk setiap area dan buat mereka menunjukkan grafik kinerja mewah mereka!

Cukup periksa ulang dua kali bahwa pria SAN telah mengaturnya untuk Anda. Jika Anda ingin RAID 10 maka bersikeras (saya lakukan) meskipun mereka terus mengatakan RAID 5 mereka tidak memiliki penalti kinerja.

(Untuk operasi "berbasis file", RAID 5 baik-baik saja. Untuk menulis intensif, segera setelah Anda mengisi buffer tulis yang Anda buat!)


2
+1 untuk rekayasa sosial kutu buku penyimpanan.
pboin

2

Waspadai semua campuran istilah di sini juga ..

Secara umum, dan sangat mendasar:

  • Array = kumpulan disk dalam pengaturan RAID (seperti RAID5)
  • Volume = bagian dari array yang disajikan ke host di SAN dengan LUN

Anda dapat memiliki beberapa volume pada array yang sama, yang harus diingat ketika Anda melakukan optimasi tingkat tinggi yang dibahas dalam utas ini.

Kuncinya adalah apa yang beberapa orang lain sebutkan (jangan lupakan), pisahkan data / log / cadangan pada spindle drive yang berbeda, bukan hanya volume yang terpisah.

Sunting: dan Helvick di atas memberi Anda jawaban -besar- tentang SANs Equallogic!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.