Menempatkan Log Transaksi pada Volume Terpisah [solid state]?

12

Log transaksi sering diisolasi pada volume yang terpisah. Alasan untuk praktik ini, seperti yang saya pahami, adalah bahwa data log transaksi ditulis secara berurutan - dan hard drive dapat menjalankan operasi penulisan dengan kecepatan yang jauh lebih besar secara berurutan dibandingkan dengan secara acak. Ini disebabkan oleh jarum kecil di dalam drive yang harus bergerak jauh lebih pendek saat menulis blok data berurutan, dibandingkan dengan penulisan acak.

(Maaf untuk interpretasi naif. Hanya mencoba memahami apa yang telah saya baca.)

Dengan mengingat hal ini ... Terpikir oleh saya bahwa solid state drive tidak memiliki sedikit jarum dan piringan dan benda-benda yang bergerak di dalamnya. Jika basis data dan log transaksi saya terletak di satu RAID 5 dari delapan solid state drive, apakah benar-benar ada sisi positif untuk memindahkan log transaksi ke volume terpisah sendiri? Jika peningkatan efisiensi yang seharusnya didasarkan pada premis dari sekuensial menulis mengurangi jarak yang jarum bergerak dan piring-piring berputar, dan solid state drive tidak memiliki bagian yang bergerak ini, apa yang saya dapatkan dengan mengisolasi log?

Chad Decker
sumber
Anda masih harus mempertimbangkan bus dan buffer. Saya akan memisahkan mereka karena perbedaan pola I / O. Jika aplikasi Anda tidak terlalu transaksional, Anda mungkin tidak akan tahu bedanya, jika biaya adalah masalah.
Eric Higgins
Saat Anda menggunakan istilah "bus" ... apakah Anda mengacu pada jalur yang diambil data dari motherboard ke kartu RAID?
Chad Decker
2
"Apakah benar-benar ada sisi positif untuk memindahkan log transaksi ke volume terpisahnya sendiri?" hampir pasti tidak, tetapi ada benar-benar kecepatan terbalik untuk memindahkan seluruh array ke RAID10 dan keandalan terbalik ke over-provisioning (yaitu under-partisi) SSD
Jack mengatakan coba topanswers.xyz

Jawaban:

10

Jawaban singkat, gunakan array tunggal, tidak mungkin ada keuntungan kinerja dari memisahkan log dari data di 8 drive SSD. Lihat SQL on SSDs: Hot and Crazy Love untuk komentar yang lebih detail (dan menghibur) tentang SSD. Berikan perhatian khusus pada catatan tentang kegagalan SSD berkorelasi.

Memisahkan log dari data pada SSD lebih merupakan RPO (tujuan titik pemulihan) daripada masalah kinerja. Gagasannya adalah bahwa Anda dapat mengurangi RPO Anda dengan memisahkan log dari data sehingga jika array data gagal, array log Anda harus / dapat tetap diakses. Hati-hati akan mempertimbangkan membuat / model drive yang berbeda di masing-masing dari dua array untuk mengurangi masalah kegagalan berkorelasi jika RPO sangat penting.

Komentar tentang bandwidth bus tidak relevan. Jika Anda perlu mengubah IO sebanyak itu, Anda punya masalah yang lebih besar untuk dikhawatirkan.

Mark Storey-Smith
sumber
-4

Ada kelompok yang setuju bahwa pada HDD akan bermanfaat untuk memisahkan, mereka masih mengklaim bahwa untuk drive SSD ini tidak lagi diperlukan.

Jadi bagi mereka saya ingin bertanya "jika tidak ada masalah pertengkaran maka mengapa RAID 10? Tidak perlu lagi stripping! Jadi, mirrowing saja sudah cukup, dan tentu saja tidak perlu 8 drive, 2x database ukuran harus cukup! "

Namun kenyataannya adalah bahwa jika sesuatu membutuhkan RAID 10 itu adalah file log!

Ini bukan hanya karena masalah sekuensial vs acak (lihat sumber daya di bawah), tetapi sebenarnya sangat penting setelah Anda memahami cara kerja drive SSD.

Untuk membuat cerita panjang pendek (untuk deskripsi yang lebih panjang lihat http://arstechnica.com/information-technology/2012/06/inside-the-ssd-revolution-how-solid-state-disks-really-work/ ), drive SSD sangat efisien dalam membaca, dan dalam menulis angka nol, namun untuk menuliskan angka itu tidak begitu efisien karena harus menghapus seluruh bagian untuk menulis bahkan satu pun!

Meskipun ini bukan masalah untuk penulisan umum, karena mereka tetap buffered dalam memori, dan ditulis dalam batas halaman, ini adalah masalah utama untuk file log, karena file log mem-bypass cache dan alih-alih blok server SQL hingga log ditulis ke disk !, yang berarti bahwa untuk setiap penulisan mungkin akan ada penghapusan bagian penuh.

Jadi untuk mengoptimalkannya, saya akan menyarankan untuk mendedikasikan setiap disk tambahan (selain ukuran database 2x, tidak perlu pengupasan!) Untuk file log, cara ini akan dapat memproses sebanyak mungkin dalam jangka waktu yang lebih pendek.

JAWABAN TUA

Jawabannya adalah ya, karena tiga alasan. 1) Acak vs Sekuensial - Meskipun jelas bahwa SSD meningkatkan kinerja secara dramatis untuk penulisan acak, masih ada masalah sekuensial vs acak, seperti yang dapat dilihat dari whitepapaers dan tautan berikut:

2) Keandalan - Ada kemungkinan kuat bahwa semua drive SSD akan gagal secara bersamaan, dalam hal ini RAID tidak ada perlindungan, namun karena drive SSD yang digunakan hanya untuk sekuensial memiliki rentang hidup yang berbeda, ini mungkin penyelamat Anda

3) Tulis Kontensi - Alasan menempatkan log pada spindelnya sendiri bukan hanya karena urutan acak vs berurutan tetapi juga karena pertikaian penulisan, seperti yang dapat dilihat dari fakta bahwa disarankan juga memiliki tempdb pada volume terpisah yang menunjukkan bahwa masalah di sini juga tentang pertikaian menulis.

Dan ini seharusnya berlaku bahkan lebih untuk file log, seperti menulis ke blok log transaksi dari dianggap komit sampai ditulis ke permukaan disk.

Bahkan untuk log Anda dapat menggunakan drive HDD biasa sebagai kertas putih Dell di http://www.dell.com/downloads/global/products/pvaul/en/ssd_vs_hdd_price_and_performance_study.pdf

EDIT

Menempatkan tempdb pada lariknya sendiri untuk memutar disk direkomendasikan oleh Microsoft, lihat

dan banyak lainnya dan itu adalah gagasan yang diterima umum di Sql Server, sementara tidak ada yang menyatakan masalah dengan memecah array.

Lebih jauh lagi, tim SQL Server telah menciptakan konsep partisi Filegroup dan Partioining, dengan tujuan tunggal untuk dapat memindahkannya pada array yang terpisah.

Dan sebenarnya MSDN di http://msdn.microsoft.com/en-us/library/ms187087(v=sql.105) merekomendasikan bahwa mungkin ada manfaat kinerja dari memisahkan indeks yang tidak tercacah pada arraynya sendiri, (meskipun ini tidak boleh dianggap sebagai saran umum untuk setiap situasi, hanya untuk beban kerja tertentu, lihat info lebih lanjut di http://weblogs.sqlteam.com/dang/archive/2008/08/01/Are-you-a-DBA -Monkey.aspx ).

Karena itu, ini hanya perpanjangan logis untuk mengatakan alasan pemisahan pada cakram pemintalan tidak hanya terkait dengan masalah membaca sekuensial dan acak, tetapi pada pendapat umum tentang penulisan, sesuatu yang juga berlaku pada SSD.

Walaupun mungkin beberapa orang tidak setuju dengan saran itu dan menganggap bahwa tidak ada manfaat menempatkan tempdb dan volumenya sendiri (seperti Jack Douglas), dan Anda bahkan mungkin mengklaim bahwa tidak ada manfaat dari memisahkan file log (seperti Mark Storey -Smith), dan alih-alih mengklaim bahwa memecah array jauh lebih buruk, masih jangan lupa bahwa ini adalah pendekatan baru yang bertentangan dengan pendekatan yang diterima umum yang disarankan oleh Microsoft dan komunitas, dan sejauh ini belum ada yang memberikan tautan ke tes benchmark untuk mendukungnya.

Jadi kata saya untuk semua downvoters adalah, saya merasa sangat tidak etis untuk meng-downvote postingan hanya karena memiliki pendapat yang berbeda dari Anda, terutama ketika 1) pendapat Anda bertentangan dengan teori yang berlaku umum 2) dan bertentangan dengan vendor (Microsoft) ) dokumentasi sendiri 3) dan Anda belum memberikan bukti apa pun hanya pendapat.

Tetapi dalam kasus ini bahkan lebih konyol, karena posting saya tidak lebih dari perpanjangan logis untuk teori ini, jadi orang yang menganggap posting ini sebagai saran tempat tidur tentu saja harus kembali ke semua posting yang memberi saran pada teori ini dan menurunkannya. .

Katakanlah seseorang memutuskan bahwa RAID adalah teori sekolah lama dan menurunkan semua postingan yang merekomendasikannya, bagaimana hal ini masuk akal?

halo yoel
sumber
Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan .
Paul White 9