Bir DB tasarımında kümelenmiş bir indeks kavramı, SSD'leri kullanırken duygusal mıdır?


44

Bir SQL sunucusu veri şeması ve sonraki sorgular, ayrıntılar, görünümler, vb. Tasarlanırken, kümelenmiş bir dizin kavramı ve diskteki veri sırası , SSD platformlarında açıkça dağıtılmak üzere yapılan DB tasarımları için dikkate almanın bir anlamı var mı?

http://msdn.microsoft.com/en-us/library/aa933131(v=sql.80).aspx
"Kümelenmiş bir dizin, tablodaki verilerin fiziksel sırasını belirler."

Fiziksel bir disk platformunda, onları düşünecek tasarım bana "sıralı" satırları almak için verilerin fiziksel olarak taranması olarak anlam ifade ediyor;
Bir SSD platformunda, tüm veri okuma erişimi aynı bir aramayı kullanır. “Fiziksel düzen” kavramı yoktur ve veri okumaları, bitlerin aynı silikon parçası üzerinde depolanması anlamında “sıralı” değildir.

Öyleyse, bir uygulama veri tabanı tasarlama sürecinde bu platformla ilgili kümelenmiş endeks değerlendirmesi nedir?

Benim ilk düşünce tam o değil "sıralı veri" fikri SSD'ler depolama alanı için geçerli ve aramaya / retreival optimizasyon olmadığı için.

DÜZENLEME: Ben SQL Server biliyorum olacaktır Sadece tasarım / optimizasyon sırasında bunu düşünmek mantıklı olmadığı konusunda philosophizing ediyorum, bir tane oluşturun.


1
Bu genel alandaki bazı makaleler (sorunuza özel değil) Sorgu Optimize Ediciler SSD'den haberdar olmalı mı? Hal Sürücüleri için Sorgu
Martin Smith

Yanıtlar:


34

Kendinize başka bir soru sorun: Eğer veritabanının tamamı bellekte ise ve diske hiç dokunmam gerekmiyorsa, verilerimi sipariş edilen bir B-ağacında depolamak mı yoksa verilerimi sırasız bir yığında depolamak mı istiyorum?

Bu sorunun cevabı erişim şeklinize bağlı olacaktır. Çoğu durumda erişiminiz için tek sıralı arama (örneğin aranır) ve aralık taramaları gerekir. Bu erişim düzenleri bir B Ağacı gerektirir, aksi takdirde verimsizdir. DW ve OLAP'ta yaygın olan bazı diğer erişim kalıpları, her zaman tüm tablonun tamamında bir araya toplanmakta ve her zaman aralık taramalarından fayda görmemektedir. Siz daha fazla araştırma yaptıkça, diğer gereksinimler ortaya çıktıkça, B-Ağacı ile bir yığına yerleştirme ve yerleştirme hızı gibi büyük ETL aktarma işleri için bir rol oynayabilir. Fakat çoğu zaman cevap gerçekten tek bir soruya yol açar: araştırabilir veya menzil taraması mı yapıyorsunuz? Cevabın çok fazla olması cevabı EVET'tir. Bu nedenle, tasarımın kümelenmiş bir dizin gerektirdiği çok büyük sayıda.

Başka bir deyişle: diskten rastgele sırayla okumak ucuz olduğu için TLB'lerinizi ve L2 satırlarınızı 64 Gb RAM tarama bonanza ile çöpe atabileceğiniz anlamına gelmez ...


Baz yığınındaki sırayı aramanın maliyeti, hatta bellekte bile, sırayı doğrudan aramada alma maliyetinden her zaman daha yüksek olacaktır. Sadece gelen mevkiinde bellek erişimi, aynı zamanda ilgili talimatlar sayısının çokluğu (operatör makine katılmak tüm arama, temelde bir katılmak olmasıdır).
Remus Rusanu

23

İyi seçilmiş bir kümelenmiş dizin kullanıyorsanız, ihtiyaç duyduğunuz tüm verileri daha az veri sayfasında daha fazla elde etmeniz daha olasıdır. Yani, ihtiyaç duyduğunuz verileri daha az hafızaya kaydedebilirsiniz. Bu, disk ya da SSD kullanıp kullanmadığınızdan bağımsız olarak fayda sağlar.

Ancak, kümelenmiş bir dizinin diğer yararının - pek çok disk taraması yerine sırayla ilgili verileri okumak / yazmak için - hakemlerin kendileri için çok büyük bir performans göstermediği SSD için önemli bir fayda değildir iplik diskleri ile.


@Matthew PK adlı kullanıcının yorumu.

Tabii ki RAM’deki A konumu, RAM’deki B konumu kadar hızlıdır. Konu o değil. Veri birçok sayfaya dağılmışsa ihtiyacınız olan tüm verilerin RAM'e sığmayacağı durumdan söz ediyorum. Herhangi bir sayfa yalnızca ilgilendiğiniz küçük miktarda veri içerebilir. Bu nedenle RDBMS, A, B ve diğer satırlara erişirken sayfaları yükleyip temizlemeye devam etmelidir. Performans cezasını aldığın yer orası.

İzleyen tüm satır isteklerinin RAM'deki sayfalardan sunulması umuduyla, her sayfanın ilgilendiğiniz verilerle dolu olması daha iyi olacaktır . Kümelenmiş bir dizini kullanmak, verilerinizin daha az sayfada bir araya getirilmesini sağlamak için iyi bir yoldur.


13

Evet, kesinlikle hala mantıklı geliyor. Yaklaşımında çok düşük seviyede düşünüyorsun. (A SQL Sunucu çok çok basitleştirilmiş açıklama) saklar B-ağacı mimarisinde verileri kümelenmiş. Bu, kümelenmiş dizin anahtarı değerlerine bağlı olarak hızlı veri alımı sağlar.

Bir öbek (kümelenmiş dizin yok) sıralı veri sırasına sahip değildir. Burada dikkate alınması gereken en önemli şey, bir yığın halinde veri sayfalarının bağlantılı bir listede bağlı olmamasıdır .

Yani cevap evet, hala SSD'de bile tablolarda kümelenmiş indekslerin oluşturulması mantıklı geliyor. Hepsi, SQL Server'ın elde edilen verilere ulaşmak için elden geçirmesi gereken veri miktarına dayanıyor. Kümelenmiş bir indeks aramasıyla, simge durumuna küçültülür.

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


Orada olacak bir kümelenmiş dizin ol. Mesele, bunun için SSD platformunda önemli olup olmadığıydı
Matthew

5
Evet, aradığı önemli. 300 okuma yerine 3 okuma, kullandığınız medya ne olursa olsun daha hızlıdır.
Thomas Stringer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.