Apakah konsep indeks berkerumun dalam desain DB sensis saat menggunakan SSD?

44

Ketika merancang skema data server SQL dan pertanyaan selanjutnya, sprocs, pandangan, dll. Apakah pengertian indeks berkerumun dan urutan data pada disk masuk akal untuk dipertimbangkan untuk desain DB yang dibuat secara eksplisit untuk digunakan pada platform SSD?

http://msdn.microsoft.com/en-us/library/aa933131(v=sql.80).aspx
"Indeks berkerumun menentukan urutan fisik data dalam sebuah tabel."

Pada platform disk fisik, desain untuk mempertimbangkannya masuk akal bagi saya sebagai pemindaian fisik data untuk mengambil baris "berurutan" bisa lebih berkinerja daripada mencari melalui tabel.
Pada platform SSD, semua akses baca data menggunakan pencarian yang identik. Tidak ada konsep "tatanan fisik" dan data yang dibaca tidak "berurutan" dalam arti bahwa bit disimpan pada potongan silikon yang sama.

Jadi, dalam proses mendesain basis data aplikasi, apakah pertimbangan indeks berkerumun relevan dengan platform ini?

Pikiran awal saya adalah bahwa itu bukan karena gagasan "data yang dipesan" tidak berlaku untuk penyimpanan SSD dan mencari / mengoptimalkan retreival.

EDIT: Saya tahu SQL Server akan membuat satu, saya hanya berfilsafat tentang apakah masuk akal untuk memikirkannya selama desain / optimasi.

Matius
sumber
1
Beberapa makalah tentang area umum ini (tidak spesifik untuk pertanyaan Anda) Apakah Pengoptimal Permintaan Perlu sadar SSD? dan Teknik Pemrosesan Kueri untuk Drive Solid State
Martin Smith

Jawaban:

34

Tanyakan kepada diri Anda pertanyaan lain: Jika seluruh basis data ada dalam memori dan saya tidak pernah menyentuh disk, apakah saya ingin menyimpan data saya di B-tree yang dipesan atau apakah saya ingin menyimpan data saya di tumpukan yang tidak berurutan?

Jawaban untuk pertanyaan ini akan tergantung pada pola akses Anda. Pada kebanyakan kasus, akses Anda memerlukan pencarian baris tunggal (mis. Mencari) dan pemindaian rentang. Pola akses ini memerlukan B-Tree, jika tidak mereka tidak efisien. Beberapa pola akses lain, umum dalam DW dan OLAP, selalu melakukan agregat di seluruh tabel ujung ke ujung selalu dan mereka tidak mendapat manfaat dari pemindaian rentang. Saat Anda menelusuri lebih lanjut persyaratan lain terungkap, seperti kecepatan memasukkan dan mengalokasikan ke tumpukan vs B-Tree mungkin memainkan peran untuk pekerjaan transfer ETL besar. Tetapi seringkali jawabannya benar-benar mengarah pada satu pertanyaan: apakah Anda mencari atau melakukan pemindaian jarak jauh? Frekuensi luar biasa jawabannya adalah YA. Dan karena itu, berapa kali desain membutuhkan indeks berkerumun.

Dengan kata lain: hanya karena murah untuk membacanya dari disk dalam urutan acak tidak menyiratkan bahwa Anda dapat membuang garis TLB dan L2 Anda dalam bonanza pemindaian RAM 64Gb ...

Remus Rusanu
sumber
Biaya mencari baris di tumpukan dasar, bahkan dalam memori, akan selalu lebih tinggi daripada biaya mengambil baris secara langsung dalam pencarian. Tidak hanya dari lokalitas akses memori, tetapi juga dari banyaknya instruksi yang terlibat (Pencarian pada dasarnya adalah gabungan, dengan semua mesin operator bergabung).
Remus Rusanu
23

Jika Anda menggunakan indeks berkerumun yang dipilih dengan baik, Anda lebih mungkin mendapatkan semua data terkait yang Anda butuhkan di halaman data yang lebih sedikit. Artinya, Anda dapat menyimpan data yang Anda butuhkan dalam memori yang lebih sedikit. Ini memberikan manfaat terlepas dari apakah Anda menggunakan disk berputar atau SSD.

Tapi Anda benar bahwa manfaat lain dari indeks berkerumun - untuk membaca / menulis data terkait secara berurutan alih-alih dengan banyak upaya disk - bukan manfaat yang signifikan untuk SSD, di mana upaya tersebut bukan biaya overhead kinerja yang besar karena mereka dengan disk berputar.


Komentar Re @Matthew PK.

Tentu saja lokasi A dalam RAM sama cepatnya dengan lokasi B dalam RAM. Itu bukan intinya. Saya sedang berbicara tentang kasus ketika semua data yang Anda butuhkan tidak akan masuk dalam RAM jika data tersebar di banyak halaman. Setiap halaman yang diberikan mungkin hanya berisi sejumlah kecil data yang Anda minati. Jadi RDBMS harus terus memuat dan membersihkan halaman saat Anda mengakses A, B, dan baris lainnya. Di situlah Anda mendapatkan penalti kinerja.

Akan lebih baik jika setiap halaman dipenuhi dengan data yang Anda minati, dengan harapan semua permintaan baris berikutnya dilayani dari halaman dalam RAM. Menggunakan indeks berkerumun adalah cara yang baik untuk memastikan bahwa data Anda dikelompokkan bersama menjadi lebih sedikit halaman.

Bill Karwin
sumber
13

Ya, itu benar-benar masih masuk akal. Anda berpikir terlalu rendah dalam pendekatan Anda. SQL Server (dalam sangat sangat penjelasan disederhanakan) toko berkerumun data dalam arsitektur B-tree. Ini memungkinkan pengambilan data cepat berdasarkan nilai kunci indeks yang dikelompokkan.

Tumpukan (tidak ada indeks berkerumun) tidak memiliki urutan data berurutan. Hal yang paling penting untuk dipertimbangkan di sini adalah tumpukan data halaman tidak tertaut dalam daftar tertaut .

Jadi jawabannya adalah ya, masih masuk akal untuk memiliki indeks berkerumun yang dibuat di atas meja, bahkan pada SSD. Itu semua didasarkan pada berapa banyak data yang harus disaring SQL Server untuk sampai ke data yang dihasilkan. Dengan pencarian indeks berkerumun, diminimalkan.

Referensi: http://msdn.microsoft.com/en-us/library/ms189051.aspx

Thomas Stringer
sumber
Ada akan menjadi indeks berkerumun. Intinya adalah apakah mencari atau tidak itu penting pada platform SSD
Matthew
5
Ya, itu penting. 3 bacaan dibandingkan 300 bacaan lebih cepat tidak peduli apa media yang Anda gunakan.
Thomas Stringer