Bellek için Optimize Edilmiş Tablolar - bakımı gerçekten zor olabilir mi?


18

MS SQL 2012'den 2014'e yükseltmenin faydalarını araştırıyorum. SQL 2014'ün en büyük satış noktalarından biri, görünüşe göre sorguları süper hızlı hale getiren bellek için optimize edilmiş tablolardır.

Bellek optimize tablolar gibi bazı sınırlamalar olduğunu gördüm, örneğin:

  • (max)Boyutlandırılmış alan yok
  • Satır başına maksimum ~ 1 KB
  • hiçbir timestampalanlar
  • Hesaplanmış sütun yok
  • UNIQUEKısıt yok

Bunların hepsi sıkıntı olarak nitelendirilir, ancak performans avantajlarından yararlanmak için gerçekten etraflarında çalışmak istersem, bir plan yapabilirim.

Gerçek kicker, bir ALTER TABLEdeyimi çalıştıramayacağınız ve bir dizin listesine her alan eklediğinizde bu rigmarole atlamanız gerektiğidir INCLUDE. Dahası, canlı DB'deki MO tablolarında şema değişiklikleri yapmak için kullanıcıları sistemden kapatmanız gerektiği anlaşılıyor.

Microsoft'un bu özelliğe çok fazla kalkınma sermayesi yatırmış olabileceğine ve sürdürmesi çok pratik olmadığına inanamadığım ölçüde bunu tamamen çirkin buluyorum. Bu beni sopanın yanlış ucunu almış olmam gerektiği sonucuna götürüyor; Onları korumanın gerçekte olduğundan çok daha zor olduğuna inanmamı sağlayan, bellek için optimize edilmiş tablolar hakkında bir şeyler yanlış anlamış olmalıydım.

Peki, ne yanlış anladım? MO tabloları kullandınız mı? Bunların kullanımını ve bakımını pratik hale getiren bir tür gizli anahtar veya süreç var mı?

Yanıtlar:


18

Hayır, hafızada bu gerçekten cilalanmamış. Eğer Agile hakkında bilgi sahibi olursanız, "minimum sevk edilebilir ürün" kavramını bileceksiniz; hafızada. MS'in SAP'nin Hana'sına ve ilkine yanıt vermesi gerektiğini hissediyorum. Bu, 2014 sürümü için zaman aralığında hata ayıklama yapabildikleri şeydi.

Başka bir şeyde olduğu gibi, bellekte bununla ilişkili maliyetler ve faydalar vardır. En büyük yararı, elde edilebilecek verimdir. Maliyetlerden biri, belirttiğiniz gibi değişiklik yönetimi için ek yüktür. Bu işe yaramaz bir ürün değil, bence, sadece net fayda sağlayacağı vaka sayısını azaltır. Sütun deposu dizinleri artık güncellenebilir ve dizinler filtrelenebilir gibi Şüphesiz, bellek içi işlevselliğinin gelecek sürümler üzerinde artacağından şüphem yok.


SQL Server 2016 artık genel kullanıma sunulmuştur. Tam da tahmin ettiğim gibi, Bellek İçi OLTP bir takım geliştirmeler aldı. Değişikliklerin çoğu, geleneksel tabloların bir süredir keyif aldığı işlevleri uygular. Benim tahminim gelecekteki özelliklerin hem bellek içi hem de geleneksel tablolar için aynı anda piyasaya sürüleceği. Zamansal tablolar bir örnek. Yeni bu sürümünde her iki tarafından desteklenmektedir In-Memory ve disk tabanlı tablolar.


14

Yeni teknolojideki sorunlardan biri - özellikle özellik tam olmayan bir şekilde yüksek sesle açıklanan bir V1 sürümü - herkesin bant genişliğine atlaması ve her iş yükü için mükemmel bir uyum olduğunu varsaymasıdır. Değil. Hekaton'un tatlı noktası, 256 GB'ın altındaki OLTP iş yükleri ve 2-4 yuvalarında çok sayıda nokta araması. Bu iş yükünüzle eşleşiyor mu?

Sınırlamaların birçoğu, yerel olarak derlenmiş prosedürlerle birleştirilen bellek içi tablolarla ilgilidir. Şunları yapabilirsiniz bellek içi tablolar kullanılarak fakat bu sınırlamaları bazı baypas elbette değil doğal derlenmiş prosedürler kullanılarak ya da en azından değil sadece.

Açıkçası performans kazancı önemli olup olmadığını test etmek gerek senin çevre ve eğer, ister dengelemeler değerinde o vardır. Bellek içi tablolardan büyük performans kazançları elde ediyorsanız, INCLUDE sütunlarında ne kadar bakım yapacağınız konusunda neden endişelendiğinizden emin değilim. Bellek içi dizinleriniz tanım gereğidir. Bunlar yalnızca geleneksel kümelenmemiş dizinlerin aralıktaki veya tam taramalarındaki aramalardan kaçınmak için gerçekten yararlı olmalıdır ve bu işlemlerin bellek içi tablolarda gerçekleşmesi gerçekten gerekli değildir (yine, iş yükünüzü profilleştirmeli ve hangi işlemlerin iyileştiğini görmelisiniz ve hangisi - hepsi kazan-kazan değil). Bugün dizinlerinizde ne sıklıkla INCLUDE sütunları kullanıyorsunuz?

Temel olarak, henüz sizin için buna değmezse V1 formunda kullanmayın. Biz sizin için cevap verebilir bir soru değil bu, müşterilerin bol söylemeye hariç olan sınırlamalar yaşamaya istekli ve bunların rağmen büyük bir yarar özelliğini kullanıyor.

SQL Server 2016

SQL Server 2016'ya doğru ilerliyorsanız, Bellek İçi OLTP'de göreceğiniz geliştirmeler ve bazı sınırlamaların giderilmesi hakkında blog yazdım . En önemlisi:

  • Maksimum dayanıklı masa boyutunda artış: 256 GB => 2 TB
  • LOB / MAX sütunlar, boş değer sütunları üzerindeki dizinler, BIN2 harmanlama gereksinimlerinin kaldırılması
  • Prosedürleri değiştirme ve yeniden derleme
  • ALTER TABLE için bazı destek - çevrimdışı olacak, ancak dizinleri değiştirebilmeniz ve / veya bırakabilmeniz / yeniden oluşturabilmeniz gerekir (ancak mevcut CTP derlemelerinde desteklenmiyor gibi görünüyor, bu nedenle bunu garanti olarak almayın)
  • DML tetikleyicileri, FK / kontrol kısıtlamaları, MARS
  • VEYA, DEĞİL, IN, VAR, İLÇE, BİRLİĞİ, DIŞ ORTAKLAR
  • paralellik

Yapabileceğim önemsiz bir değişikliğin örneği olarak "ekle" sütunlarını kullanıyordum, ancak şimdi sizden bunun iyi bir örnek olmadığını öğrendim. Daha da önemlisi, örneğin, geleneksel bir tabloda çok rahatsız edici olmayan bir eylem olan, ancak MO tabloları için çok zahmetli olacak yeni nullable sütunları eklemektir. Üzerinde çalıştığımız sistemin sürekli genişlemesi (özellik taleplerimiz hata raporları ile rekabet halinde), bu muhtemelen bizim için bir katil olacak.
Shaul Behr

3
@shaul tamam, bu yüzden kullanmayın. Ya da sadece sabit tabloları belleğe koyun . Veya sürekli olarak sütun (EAV) eklediğiniz farklı bir tasarım düşünün. Olduğu gibi, sadece bu teknolojinin sizin için olmadığını belirtiyorsunuz. Çocuklarım var, bu yüzden bir Porsche Cayman S'nin benim için pratik olmadığından ya da en azından günlük bir sürücü olarak olmadığından şikayet etmiyorum. Belki hafta sonlarında kullanabilirim (tıpkı şemanızın bölümleri için bellek içi OLTP'yi kullanabilirsiniz, ancak her şeyi değil). Bu kadar yaygın olmayan ve V1 özellikleriyle çakışan gereksinimleriniz olması Microsoft'un hatası değildir.
Aaron Bertrand

Aaron, EAV nedir?
Shaul Behr


2

Sen olamaz bir yukarı çekmek için, bir hafıza optimize tabloyu sağ tıklayın tasarımcı istediğiniz gibi SQL Server Management Studio içinde, ve yeni sütunlar ekleyin. Ayrıca edemez bir araç olarak tablo adı içindeki tıklayın adlandırma tabloyu. (Bunu yazdığım için SQL 2014.)

Bunun yerine, tabloyu sağ tıklatıp yeni bir sorgu penceresine create komutunu yazabilirsiniz. Bu create komutu yeni sütunlar eklenerek değiştirilebilir.

Böylece, tabloyu değiştirmek için verileri yeni bir tablo, geçici tablo veya tablo değişkeninde saklayabilirsiniz . Ardından , tabloyu yeni şema ile bırakıp yeniden oluşturabilirsiniz ve son olarak olarak gerçek verilere geri kopyalayabilirsiniz . Bu 3 konteyner kabuk oyunu çoğu kullanım durumu için sadece biraz daha az uygundur.

Ancak, çözmeye çalıştığınız bir performans sorunu yoksa, Bellek Optimize Edilmiş tablolarla uğraşmak için hiçbir nedeniniz olmaz.

Ardından, kullanım durumunuz için sınırlamaların ve geçici çözümlerin buna değip değmeyeceğini tartmanız gerekir. Bir performans sorununuz mu var? Diğer her şeyi denedin mi? Bu performansınızı 10-100x artıracak mı? Kullanmak veya kullanmamak, muhtemelen her iki şekilde de biraz beyinsiz olacak.


-2

Bellek İçi OLTP'yi Operasyonel Sunucularda büyük bir sorun olmadan kullanabilirsiniz. bu teknolojiyi bir Bankacılık ve Ödeme şirketinde kullandık,

Genel olarak, iş yükü çok yüksek olduğunda belleği optimize edilmiş tabloları kullanabiliriz. Bellek İçi OLTP kullanarak 30X'e kadar daha iyi performans elde edebilirsiniz! Microsoft, SQL Server 2016 ve 2017'de bu sınırlamaların çoğunu düzeltir. belleği optimize edilmiş tablolar, Disk Tabanlı tablolarla karşılaştırıldığında tamamen farklı bir mimariye sahiptir.

belleği optimize edilmiş tablolar iki türdür. dayanıklı masalar ve dayanılmaz masalar. Dayanıklı ve Dayanıklı Olmayan Tablolar, tablo verilerinin bellekte kalmasını sağlar. Daha fazla dayanıklı tablolar, Kurtarma Verileri ve Şema için Diskler ile ilgili verilere devam eder. Operasyonel senaryoların çoğunda dayanıklı tablolar kullanmalıyız çünkü kayıp veriler burada kritik öneme sahiptir. ETL yükleme ve Önbellekleme gibi bazı senaryolarda dayanılmaz tablolar kullanabiliriz.

bu e-kitapları kullanabilir ve bu teknolojiyi nasıl kullanacağınızı öğrenebilirsiniz:

Kalen Delaney: https://www.red-gate.com/library/sql-server-internals-in-memory-oltp

Dmitri Korotkevitch: https://www.apress.com/gp/book/9781484227718

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.