Memory Optimized Tables - พวกเขายากที่จะรักษาหรือไม่?


18

ฉันกำลังตรวจสอบประโยชน์ของการอัปเกรดจาก MS SQL 2012 เป็น 2014 หนึ่งในจุดขายที่ยิ่งใหญ่ของ SQL 2014 คือตารางที่ปรับให้เหมาะสมกับหน่วยความจำ

ฉันพบว่ามีข้อ จำกัด บางประการเกี่ยวกับตารางที่เพิ่มประสิทธิภาพหน่วยความจำเช่น:

  • ไม่มี(max)ฟิลด์ขนาด
  • สูงสุด ~ 1KB ต่อแถว
  • ไม่มีtimestampสาขา
  • ไม่มีคอลัมน์ที่คำนวณ
  • ไม่มีUNIQUEข้อ จำกัด

สิ่งเหล่านี้มีคุณสมบัติเป็นสิ่งรบกวน แต่ถ้าฉันต้องการที่จะหลีกเลี่ยงพวกเขาเพื่อให้ได้รับผลประโยชน์จากการทำงานฉันสามารถวางแผนได้

นักเตะตัวจริงคือความจริงที่ว่าคุณไม่สามารถเรียกใช้ALTER TABLEคำสั่งได้และคุณจะต้องผ่านอุปกรณ์ตรวจจับนี้ทุกครั้งที่คุณเพิ่มฟิลด์ลงในINCLUDEรายการดัชนี นอกจากนี้ยังปรากฏว่าคุณต้องปิดผู้ใช้ออกจากระบบเพื่อที่จะเปลี่ยนแปลงสคีมาใด ๆ กับตาราง MO บนฐานข้อมูลสด

ฉันพบว่าสิ่งนี้ช่างเลวร้ายเหลือเกินจนฉันไม่อยากเชื่อเลยว่าไมโครซอฟท์อาจลงทุนด้านการพัฒนาเป็นจำนวนมากในฟีเจอร์นี้ สิ่งนี้นำฉันไปสู่ข้อสรุปที่ว่าฉันต้องผ่านจุดผิดที่ผิดพลาด ฉันต้องเข้าใจผิดบางอย่างเกี่ยวกับตารางที่ปรับให้เหมาะสมกับหน่วยความจำซึ่งทำให้ฉันเชื่อว่าการบำรุงรักษามันยากกว่าที่เป็นจริง

ดังนั้นฉันเข้าใจผิดอะไร คุณใช้ตาราง MO แล้วหรือยัง มีการสลับลับหรือกระบวนการบางอย่างที่ทำให้สามารถใช้งานและบำรุงรักษาได้จริงหรือไม่?

คำตอบ:


18

ไม่ในหน่วยความจำจริง ๆ แล้วมันเป็นเงา หากคุณคุ้นเคยกับ Agile คุณจะรู้ถึงแนวคิดของ "ผลิตภัณฑ์ที่สามารถเปลี่ยนแปลงได้น้อยที่สุด"; ในความทรงจำก็คือ ฉันรู้สึกว่า MS ต้องการการตอบสนองต่อ Hana และตระกูลของ SAP นี่คือสิ่งที่พวกเขาจะได้รับการดีบั๊กในกรอบเวลาสำหรับการเปิดตัว 2014

เช่นเดียวกับสิ่งอื่นในหน่วยความจำมีค่าใช้จ่ายและผลประโยชน์ที่เกี่ยวข้อง ประโยชน์ที่สำคัญคือปริมาณงานที่สามารถทำได้ หนึ่งในค่าใช้จ่ายคือค่าใช้จ่ายสำหรับการจัดการการเปลี่ยนแปลงตามที่คุณกล่าวถึง สิ่งนี้ไม่ได้ทำให้มันเป็นผลิตภัณฑ์ที่ไร้ประโยชน์ในความคิดของฉันมันแค่ลดจำนวนกรณีที่จะให้ประโยชน์สุทธิ เช่นเดียวกับดัชนี columnstore ที่สามารถอัปเดตได้และดัชนีสามารถกรองได้ฉันไม่สงสัยเลยว่าการทำงานของหน่วยความจำในเครื่องจะดีขึ้นกว่าการวางจำหน่ายในอนาคต


โดยทั่วไป SQL Server 2016 จะพร้อมใช้งานในขณะนี้ อย่างที่ฉันคิดไว้In-Memory OLTPได้รับการปรับปรุงหลายอย่าง การเปลี่ยนแปลงส่วนใหญ่จะใช้ฟังก์ชั่นการทำงานที่ตารางแบบเดิม ๆ ใช้มาระยะหนึ่ง ฉันเดาว่าฟีเจอร์ในอนาคตจะเปิดตัวพร้อมกันสำหรับทั้งในหน่วยความจำและตารางทั่วไป ตารางชั่วคราวเป็นตัวพิมพ์ใหญ่ - เล็ก ใหม่ในรุ่นนี้รองรับทั้งในหน่วยความจำและดิสก์ตามตาราง


14

หนึ่งในปัญหาที่เกิดขึ้นกับเทคโนโลยีใหม่โดยเฉพาะอย่างยิ่งรุ่น V1 ที่ได้รับการเปิดเผยอย่างมากว่าไม่สมบูรณ์ - เป็นที่ที่ทุกคนกระโดดบน bandwagon และคิดว่ามันเหมาะสำหรับทุกภาระงาน มันไม่ใช่. จุดที่น่าสนใจของ Hekaton คือปริมาณงาน OLTP ที่น้อยกว่า 256 GB ที่มีการค้นหาจุดจำนวนมากบนซ็อกเก็ต 2-4 ตัว สิ่งนี้ตรงกับภาระงานของคุณหรือไม่?

ข้อ จำกัด มากมายที่เกี่ยวข้องกับตารางในหน่วยความจำรวมกับโพรซีเดอร์ที่คอมไพล์แล้ว แน่นอนว่าคุณสามารถข้ามข้อ จำกัด เหล่านี้ได้โดยใช้ตารางในหน่วยความจำ แต่ไม่ได้ใช้วิธีการที่รวบรวมไว้หรืออย่างน้อยก็ไม่เฉพาะ

เห็นได้ชัดว่าคุณจำเป็นต้องทดสอบว่าการเพิ่มประสิทธิภาพนั้นมีผลอย่างมากในสภาพแวดล้อมของคุณหรือไม่และหากเป็นเช่นนั้นการแลกเปลี่ยนจะคุ้มค่าหรือไม่ หากคุณได้รับประสิทธิภาพที่ยอดเยี่ยมได้รับจากตารางในหน่วยความจำฉันไม่แน่ใจว่าทำไมคุณกังวลเกี่ยวกับการบำรุงรักษาที่คุณจะแสดงในคอลัมน์ INCLUDE ดัชนีในหน่วยความจำของคุณครอบคลุมตามคำจำกัดความ สิ่งเหล่านี้ควรเป็นประโยชน์สำหรับการหลีกเลี่ยงการค้นหาในช่วงหรือการสแกนแบบเต็มของดัชนีที่ไม่ใช่แบบคลัสเตอร์และการดำเนินการเหล่านี้ไม่ควรเกิดขึ้นจริงในตารางในหน่วยความจำ (อีกครั้งคุณควรทำโปรไฟล์ภาระงานของคุณ และสิ่งที่ไม่ - ไม่ใช่ทั้งหมด win-win) คุณทำโคลนรวมคอลัมน์ในดัชนีของคุณบ่อยแค่ไหน?

โดยพื้นฐานแล้วถ้ามันยังไม่คุ้มกับคุณในรูปแบบ V1 อย่าใช้มัน นั่นไม่ใช่คำถามที่เราสามารถตอบให้คุณได้ยกเว้นเพื่อบอกคุณว่าลูกค้าจำนวนมากยินดีที่จะอยู่กับข้อ จำกัด และใช้คุณลักษณะเพื่อประโยชน์ที่ยอดเยี่ยมทั้งๆที่พวกเขา

SQL Server 2016

ถ้าคุณอยู่ในทางของคุณไปยัง SQL Server 2016 ฉันได้ blogged เกี่ยวกับการปรับปรุงคุณจะเห็นในในหน่วยความจำ OLTP เช่นเดียวกับการกำจัดของบางส่วนของข้อ จำกัด สะดุดตาที่สุด:

  • เพิ่มขนาดโต๊ะที่ทนทานสูงสุด: 256 GB => 2 TB
  • คอลัมน์ LOB / MAX จัดทำดัชนีในคอลัมน์ที่ไม่สามารถใช้ได้การลบข้อกำหนดการเปรียบเทียบ BIN2
  • แก้ไข & คอมไพล์ของโพรซีเดอร์
  • การสนับสนุนบางอย่างสำหรับ ALTER TABLE - มันจะออฟไลน์ แต่คุณควรจะสามารถเปลี่ยนแปลงและ / หรือวาง / สร้างดัชนีใหม่ได้ (ดูเหมือนจะไม่ได้รับการสนับสนุนในการสร้าง CTP ปัจจุบัน แต่ไม่ควรใช้สิ่งนี้เป็นการรับประกัน)
  • ทริกเกอร์ DML, FK / ตรวจสอบข้อ จำกัด , MARS
  • หรือไม่เข้าร่วมออกนอกสหภาพเข้าร่วมภายนอก
  • ความเท่าเทียม

ฉันใช้คอลัมน์ "รวม" เป็นตัวอย่างของการเปลี่ยนแปลงเล็กน้อยที่ฉันอาจต้องทำ แต่ตอนนี้ฉันได้เรียนรู้จากคุณว่านี่ไม่ใช่ตัวอย่างที่ดี ตัวอย่างที่เกี่ยวข้องคือการเพิ่มคอลัมน์ nullable ใหม่ซึ่งเป็นการกระทำที่ไม่ก่อกวนในตารางทั่วไป แต่จะมีความยุ่งยากมากกับตาราง MO เนื่องจากระบบที่เรากำลังทำงานนั้นกำลังขยายตัวอย่างต่อเนื่อง (การร้องขอคุณสมบัติของเรากำลังแข่งขันกันในจำนวนที่มีรายงานข้อผิดพลาด) สิ่งนี้น่าจะเป็นฆาตกรสำหรับเรา
Shaul บอกว่าฉันสนับสนุนโมนิกา

3
@shaul ตกลงดังนั้นอย่าใช้มัน หรือใส่เฉพาะตารางที่มั่นคงในหน่วยความจำ หรือพิจารณาการออกแบบอื่นที่คุณเพิ่มคอลัมน์ (EAV) อยู่ตลอดเวลา ฉันคิดว่าคุณแค่พูดจาโผงผางว่าเทคโนโลยีนี้ไม่เหมาะกับคุณ ฉันมีลูกดังนั้นฉันจึงไม่บ่นว่า Porsche Cayman S นั้นไม่เหมาะสำหรับฉัน - หรืออย่างน้อยก็ไม่ได้เป็นไดร์เวอร์รายวัน บางทีฉันอาจใช้มันในวันหยุดสุดสัปดาห์ (เช่นคุณอาจใช้ OLTP ในหน่วยความจำในส่วนของสคีมาของคุณ แต่ไม่ใช่ทุกอย่าง) ข้อเท็จจริงที่ว่าคุณมีข้อกำหนดที่ไม่เหมือนกันและขัดแย้งกับฟีเจอร์ V1 ไม่ใช่ความผิดของ Microsoft
Aaron Bertrand



2

คุณไม่สามารถคลิกขวาที่ตารางที่ปรับให้เหมาะสมหน่วยความจำเพื่อดึงตัวออกแบบและเพิ่มคอลัมน์ใหม่ตามที่คุณต้องการจากภายใน Sql Server Management Studio คุณยังไม่สามารถคลิกภายในชื่อตารางเพื่อเปลี่ยนชื่อตาราง (SQL 2014 เป็นของฉันเขียนนี้)

แต่คุณสามารถคลิกขวาที่ตารางและสคริปต์คำสั่งสร้างออกไปยังหน้าต่างแบบสอบถามใหม่ คำสั่งสร้างนี้สามารถแก้ไขได้โดยการเพิ่มคอลัมน์ใหม่ใด ๆ

ดังนั้นในการปรับเปลี่ยนตารางคุณสามารถจัดเก็บข้อมูลในตารางใหม่ตาราง temp หรือตัวแปรตาราง จากนั้นคุณสามารถวางและสร้างตารางที่มีโครงสร้างใหม่และในที่สุดก็คัดลอกกลับมาอยู่ในข้อมูลที่แท้จริง เกม 3 container shell เกมนี้มีความสะดวกน้อยกว่าสำหรับกรณีใช้งานส่วนใหญ่

แต่คุณไม่มีเหตุผลที่จะต้องกังวลกับตารางเพิ่มประสิทธิภาพหน่วยความจำหากไม่มีปัญหาเรื่องประสิทธิภาพที่คุณพยายามแก้ไข

จากนั้นคุณจะต้องชั่งน้ำหนักหากข้อ จำกัด และวิธีแก้ไขมีค่าสำหรับกรณีการใช้งานของคุณ คุณมีปัญหาเรื่องประสิทธิภาพหรือไม่? คุณลองทุกอย่างแล้วหรือยัง สิ่งนี้จะปรับปรุงประสิทธิภาพของคุณได้ 10-100x หรือไม่ การใช้หรือไม่ใช้มันอาจจะเป็นเรื่องที่ไม่มีสมองเลย


-2

คุณสามารถใช้ In-Memory OLTP ใน Operational Servers ได้โดยไม่มีปัญหาใด ๆ เราใช้เทคโนโลยีนี้ใน บริษัท การธนาคารและการชำระเงิน

โดยทั่วไปเราสามารถใช้ตารางเพิ่มประสิทธิภาพหน่วยความจำเมื่อปริมาณงานสูงเกินไป ด้วยการใช้ OLTP ในหน่วยความจำคุณสามารถเพิ่มประสิทธิภาพได้ถึง 30 เท่า! Microsoft แก้ไขข้อ จำกัด นี้เกือบทั้งหมดใน SQL Server 2016 และ 2017 ตารางที่ปรับให้เหมาะสมหน่วยความจำมีสถาปัตยกรรมที่แตกต่างอย่างสิ้นเชิงเมื่อเทียบกับตารางที่ยึดตามดิสก์

ตารางที่ปรับให้เหมาะสมหน่วยความจำมีสองประเภท ตารางที่ทนทานและตารางที่ไม่คงทน ตารางที่ทนทานและไม่คงทนช่วยรักษาข้อมูลตารางที่อยู่ในหน่วยความจำ ตารางที่คงทนของ Furthemore ยังคงมีข้อมูลบนดิสก์สำหรับ Data Recovery และ Schema สถานการณ์การดำเนินงานส่วนใหญ่เราควรใช้ตารางที่มีความทนทานเนื่องจากข้อมูลที่สูญหายเป็นสิ่งสำคัญที่นี่ ในบางสถานการณ์เช่นการโหลด ETL และการแคชเราสามารถใช้ตารางที่ไม่สามารถต้านทานได้

คุณสามารถใช้ ebooks นี้และเรียนรู้วิธีการใช้เทคโนโลยีนี้:

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

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.