เผยแพร่ครั้งแรกโดย TriCore:12 เมษายน 2017
ชุดโพสต์บล็อกสองส่วนนี้ครอบคลุมคุณลักษณะการปรับแต่งประสิทธิภาพใหม่ในฐานข้อมูล Oracle® ส่วนที่ 1 กล่าวถึง OracleDatabase เวอร์ชัน 12.1.0.1 โพสต์ติดตามผลนี้ครอบคลุมเวอร์ชัน 12.1.0.2
ข้อมูลเบื้องต้นเกี่ยวกับการจัดเก็บคอลัมน์ในหน่วยความจำ
ที่เก็บคอลัมน์ในหน่วยความจำ (ที่เก็บคอลัมน์ IM) เป็นพื้นที่ทางเลือกของ SystemGlobal Area (SGA) ที่เก็บสำเนาของตาราง พาร์ติชั่น และออบเจกต์ฐานข้อมูลอื่นๆ ในรูปแบบคอลัมน์ที่ปรับให้เหมาะสมสำหรับการสแกนอย่างรวดเร็ว การจัดเก็บคอลัมน์ IM เร่งประสิทธิภาพฐานข้อมูลของแอปพลิเคชันการวิเคราะห์ คลังข้อมูล และการประมวลผลธุรกรรมออนไลน์ (OLTP)
วิธีการจัดเก็บคอลัมน์ IM
ที่เก็บคอลัมน์ IM เก็บสำเนาของวัตถุฐานข้อมูลใน SGA ไม่แทนที่แคชบัฟเฟอร์ฐานข้อมูล พื้นที่หน่วยความจำทั้งสองสามารถจัดเก็บข้อมูลเดียวกันได้ในรูปแบบต่างๆ แถวที่จัดเก็บในที่เก็บคอลัมน์ IM จะถูกแบ่งออกเป็นพื้นที่หน่วยความจำขนาดใหญ่ในรูปแบบคอลัมน์ คอลัมน์จะอยู่แยกกันในพื้นที่หน่วยความจำที่อยู่ติดกันภายในแต่ละภูมิภาค
คุณสามารถเปิดใช้งานที่เก็บคอลัมน์ IM สำหรับวัตถุฐานข้อมูลต่อไปนี้:
- ตาราง
- มุมมองที่เป็นเนื้อหา
- พาร์ทิชัน
- ตารางสเปซ
คุณสามารถจัดเก็บคอลัมน์ของตารางทั้งหมดในที่เก็บคอลัมน์ IM หรือเพียงแค่ส่วนย่อยของคอลัมน์เหล่านั้น ในทำนองเดียวกัน สำหรับตารางที่แบ่งพาร์ติชั่น คุณสามารถจัดเก็บพาร์ติชั่นทั้งหมดของตาราง หรือเก็บเฉพาะส่วนย่อยของพาร์ติชั่นก็ได้ หากคุณเปิดใช้งานที่เก็บ IMcolumn ที่ระดับพื้นที่ตาราง Oracle Database จะเปิดใช้งานตารางทั้งหมดและมุมมองที่เป็นรูปธรรมในพื้นที่ตารางสำหรับที่เก็บคอลัมน์ IM โดยอัตโนมัติ
ประโยชน์ด้านประสิทธิภาพของการใช้ที่เก็บคอลัมน์ IM
การจัดเก็บอ็อบเจ็กต์ฐานข้อมูลในหน่วยความจำแทนที่จะเก็บไว้ในดิสก์ทำให้ OracleDatabase ดำเนินการสแกน สืบค้น รวมและรวบรวมได้รวดเร็วยิ่งขึ้น ที่เก็บ IMcolumn สามารถเพิ่มประสิทธิภาพเมื่อทำงานต่อไปนี้:
- การสแกนแถวจำนวนมากและใช้ตัวกรอง
- การสืบค้นชุดย่อยขนาดเล็กของคอลัมน์ชุดใหญ่
- การรวมตารางขนาดเล็กเข้ากับตารางขนาดใหญ่ โดยเฉพาะอย่างยิ่งเมื่อเงื่อนไขการเข้าร่วมกรองแถวส่วนใหญ่
- การรวมข้อมูลในแบบสอบถาม
ที่เก็บคอลัมน์ IM ยังช่วยเพิ่มประสิทธิภาพการทำงานของคำสั่งภาษาการจัดการข้อมูล (DML) โดยทั่วไป ระบบ OLTP ต้องการดัชนีจำนวนมากเพื่อสร้างคอลัมน์ที่เข้าถึงได้ทั่วไป ดัชนีเหล่านี้อาจมีผลกระทบด้านลบต่อประสิทธิภาพของคำสั่ง DML การจัดเก็บออบเจ็กต์ฐานข้อมูลในที่เก็บคอลัมน์ IM ทำให้ดัชนีเหล่านี้ไม่จำเป็นเนื่องจากการสแกนทำงานเร็วขึ้นมาก การกำจัดดัชนีที่ไม่จำเป็นจะช่วยเพิ่มประสิทธิภาพการทำงานของคำสั่ง DML เนื่องจากต้องมีการอัปเดตดัชนีน้อยลง
ที่มาของรูปภาพ :Oracle Learning Library วิดีโอ YouTube:Oracle Database 12cdemos:In-Memory Column Store ArchitectureOverview
การประเมินขนาดที่ต้องการของที่เก็บคอลัมน์ IM
ที่เก็บคอลัมน์ IM รองรับวิธีการบีบอัดดังต่อไปนี้:
วิธีการบีบอัด | ลำดับการบีบอัดข้อมูลในหน่วยความจำ | การเปรียบเทียบการบีบอัดข้อมูลในหน่วยความจำ |
---|---|---|
ไม่มีการบีบอัดข้อมูล | 1 | ไม่มี |
MEMCOMPRESS สำหรับ DML | 2 (บีบอัดน้อยที่สุด) | B<ทั้งหมด |
บันทึกสำหรับคำถามต่ำ | 3 | B |
บันทึกสำหรับคำถามสูง | 4 | C |
MEMCOMPRESS สำหรับความจุต่ำ | 5 | D |
MEMCOMPRESS สำหรับความจุสูง | 6 (บีบอัดสูง) | ทั้งหมด |
ตัวอย่างต่อไปนี้แสดงวิธีเปิดใช้งาน oe.product_information
tablefor ที่เก็บคอลัมน์ IM และระบุวิธีการบีบอัด MEMCOMPRESS FOR CAPACITY HIGH
:
SQL>ALTER TABLE oe.product_information INMEMORY MEMCOMPRESS FOR CAPACITY HIGH;
การปรับขนาดที่เก็บคอลัมน์ IM
หลังจากที่คุณกำหนดหน่วยความจำที่จำเป็นในการจัดเก็บวัตถุฐานข้อมูลในที่เก็บ IMcolumn แล้ว คุณสามารถกำหนดขนาดได้โดยใช้ INMEMORY_SIZE
พารามิเตอร์เริ่มต้น
ใช้ขั้นตอนต่อไปนี้เพื่อกำหนดขนาดของที่เก็บคอลัมน์ IM:
-
ตั้งค่า
INMEMORY_SIZE
พารามิเตอร์เริ่มต้นตามขนาดที่ต้องการค่าเริ่มต้นสำหรับพารามิเตอร์นี้คือ
0
ซึ่งหมายความว่าไม่มีการใช้ที่เก็บคอลัมน์ IM หากต้องการเปิดใช้งานที่เก็บคอลัมน์ IM ให้ตั้งค่าพารามิเตอร์นี้เป็นค่า anonzeroในสภาพแวดล้อมที่มีผู้เช่าหลายราย คุณสามารถระบุขนาดของที่เก็บคอลัมน์ IM สำหรับแต่ละฐานข้อมูลแบบเสียบได้ (PDB) โดยการตั้งค่าพารามิเตอร์นี้ต่อ PDB ผลรวมของค่าสำหรับ PDB ไม่จำเป็นต้องเท่ากับค่าสำหรับฐานข้อมูลคอนเทนเนอร์ (CDB) และอาจยิ่งใหญ่กว่านั้น
-
หลังจากที่คุณกำหนดขนาดของที่เก็บคอลัมน์ IM แล้ว คุณต้องรีสตาร์ทอินสแตนซ์ฐานข้อมูลของคุณเพื่อเปิดใช้งานการจัดเก็บวัตถุฐานข้อมูล
ตัวอย่างต่อไปนี้แสดงวิธีกำหนดขนาดของที่เก็บคอลัมน์ IM เป็น 100 GB:
ALTER SYSTEM SET INMEMORY_SIZE = 100G;
รองรับการจัดการสำหรับการจัดเก็บคอลัมน์ IM
รายงานการตรวจสอบ SQL รายงานประวัติเซสชันที่ใช้งานอยู่ (ASH) และรายงานพื้นที่เก็บข้อมูลปริมาณงานอัตโนมัติ (AWR) จะแสดงสถิติสำหรับการดำเนินการต่างๆ ในหน่วยความจำ
โหมดการแคชฐานข้อมูล
โหมดแคชฐานข้อมูลมีสองโหมด:
- โหมดแคชฐานข้อมูลเริ่มต้นที่ Oracle Database เวอร์ชันก่อนหน้าใช้
- โหมดบังคับแคชของฐานข้อมูลเต็มรูปแบบซึ่งเพิ่งมาใหม่ใน Oracle Database 12cRelease 1 (12.1.0.2)
โหมดการแคชฐานข้อมูลเริ่มต้น
ตามค่าเริ่มต้น Oracle Database จะใช้โหมดแคชฐานข้อมูลเริ่มต้นเมื่อทำการสแกนตารางแบบเต็ม
หากอินสแตนซ์ฐานข้อมูล Oracle ระบุว่ามีพื้นที่เพียงพอในการแคชฐานข้อมูลทั้งหมดในบัฟเฟอร์แคชและมีประโยชน์ต่อ Doso อินสแตนซ์จะแคชฐานข้อมูลทั้งหมดโดยอัตโนมัติในบัฟเฟอร์แคช
หากอินสแตนซ์กำหนดว่ามีพื้นที่ไม่เพียงพอในการจัดเก็บฐานข้อมูลทั้งหมดในบัฟเฟอร์แคช จะดำเนินการดังต่อไปนี้:
- ตารางที่เล็กกว่าที่มีขนาดบัฟเฟอร์แคชน้อยกว่าสองเปอร์เซ็นต์ :โหลดตารางเหล่านี้ลงในหน่วยความจำ
- โต๊ะขนาดกลาง :วิเคราะห์ช่วงเวลาระหว่างการสแกนตารางล่าสุดและการประทับเวลาของบัฟเฟอร์แคช หากขนาดของตารางที่ใช้ซ้ำในการสแกนตารางครั้งล่าสุดมากกว่าขนาดบัฟเฟอร์แคชที่เหลืออยู่ ให้แคชตาราง
- โต๊ะใหญ่ :ไม่โหลดสิ่งเหล่านี้ลงในหน่วยความจำเว้นแต่คุณจะประกาศตารางสำหรับ
KEEP
. อย่างชัดเจน บัฟเฟอร์พูล
บังคับโหมดการแคชฐานข้อมูลแบบเต็ม
โหมดบังคับแคชฐานข้อมูลแบบเต็มช่วยให้คุณสามารถแคชหน่วยความจำฐานข้อมูลทั้งหมด ซึ่งอาจให้การปรับปรุงประสิทธิภาพอย่างมากเมื่อทำการสแกนตารางแบบเต็มหรือเข้าถึงวัตถุขนาดใหญ่ (LOB)
ในโหมดแคชเริ่มต้น Oracle Database จะไม่แคชข้อมูลพื้นฐานเสมอเมื่อผู้ใช้สอบถามตารางขนาดใหญ่ ในโหมดการแคชฐานข้อมูลแบบเต็ม Oracle Database จะถือว่าบัฟเฟอร์แคชมีขนาดใหญ่พอที่จะแคชฐานข้อมูลทั้งหมด และพยายามแคชบล็อกทั้งหมดที่สืบค้นเข้าถึง สำเร็จเมื่อขนาดของฐานข้อมูลมีขนาดเล็กกว่าขนาดบัฟเฟอร์ฐานข้อมูล
Oracle Database โหลดไฟล์ข้อมูลทั้งหมดลงในบัฟเฟอร์แคชเมื่อมีการเข้าถึงใหม่ ซึ่งรวมถึง NOCACHE LOB และ LOB ที่ใช้ Oracle Database SecureFiles
ที่มาของรูปภาพ :DB In-MemoryCaching แบบเต็ม
เมื่อใดควรใช้โหมดการแคชฐานข้อมูลแบบเต็มแบบบังคับ
ลองใช้โหมดบังคับแคชฐานข้อมูลแบบเต็มในสถานการณ์ต่อไปนี้:
- ขนาดฐานข้อมูลแบบลอจิคัล (หรือพื้นที่ที่ใช้จริง) มีขนาดเล็กกว่าบัฟเฟอร์แคชแต่ละรายการของอินสแตนซ์ฐานข้อมูลแต่ละรายการในสภาพแวดล้อม Oracle RealApplication Clusters (RAC) คำแนะนำนี้ยังใช้กับฐานข้อมูล tonon-Oracle RAC ด้วย
- ขนาดฐานข้อมูลลอจิคัลมีขนาดเล็กกว่า 80% ของขนาดแคชบัฟเฟอร์รวมของอินสแตนซ์ฐานข้อมูลทั้งหมดสำหรับเวิร์กโหลดที่มีการแบ่งพาร์ติชันอย่างดี (การเข้าถึงโดยอินสแตนซ์) ในสภาพแวดล้อม Oracle RAC
- ฐานข้อมูลใช้
SGA_TARGET
หรือMEMORY_TARGET
. - The
NOCACHE
ต้องแคช LOBNOCACHE
LOB จะไม่ถูกแคชเว้นแต่จะบังคับให้ใช้การแคชฐานข้อมูลเต็มรูปแบบ
ในสามสถานการณ์แรก คุณควรตรวจสอบประสิทธิภาพของระบบเป็นระยะเพื่อตรวจสอบว่าตัวบ่งชี้ประสิทธิภาพตรงตามความคาดหวังของคุณ
หมายเหตุ :เมื่ออินสแตนซ์ฐานข้อมูล Oracle RAC หนึ่งใช้โหมดการแคชฐานข้อมูลแบบเต็ม อินสแตนซ์ฐานข้อมูลอื่นๆ ทั้งหมดใน Oracle RACenvironment จะใช้โหมดนี้ด้วย ในสภาพแวดล้อมที่มีผู้เช่าหลายราย โหมดบังคับแคชของฐานข้อมูลแบบเต็มจะมีผลกับ CDB ทั้งหมด รวมถึง PDB ทั้งหมดด้วย
ตั้งค่าและตรวจสอบโหมดแคชฐานข้อมูล
ขั้นแรก ตรวจสอบฐานข้อมูลและขนาดหน่วยความจำ คุณสามารถยกเว้น SYSAUX
tablespace ดังแสดงในตัวอย่างต่อไปนี้:
SQL> col size_mb format 9999
SQL> SELECT sum(bytes)/1024/1024 seg_size_mb FROM dba_segments where tablespace_name != 'SYSAUX';
SEG_SIZE_MB
-----------
4971
ใช้คำสั่งต่อไปนี้เพื่อตรวจสอบขนาดของบัฟเฟอร์แคช:
SQL> SELECT round(sum(cnum_set * blk_size)/1024/1024) size_mb FROM X$KCBWDS;
SIZE_MB
-------
5283
ใช้ขั้นตอนต่อไปนี้เพื่อกำหนดค่าฐานข้อมูลของคุณบังคับการแคชฐานข้อมูลแบบเต็ม:
SQL> startup mount;
Database mounted.
SQL> ALTER DATABASE FORCE FULL DATABASE CACHING;
Database altered.
SQL> SELECT force_full_db_caching FROM v$database;
FORslug: '' ---YES
SQL> alter database open;
Database altered.
ใช้ขั้นตอนต่อไปนี้เพื่อตรวจสอบว่ามีการเปิดใช้งานโหมดการแคชฐานข้อมูลแบบเต็ม:
-
ใช้คำสั่งต่อไปนี้เพื่อค้นหา
V$DATABASE
มุมมอง:SQL>SELECT FORCE_FULL_DB_CACHING FROM V$DATABASE;
ผลลัพธ์คือ
YES
หรือNO
. -
หากต้องการเปิดใช้งานโหมดบังคับแคชฐานข้อมูลแบบเต็ม ให้ใช้
ALTER DATABASE
. ต่อไปนี้ คำสั่ง:ALTER DATABASE FORCE FULL DATABASE CACHING;
คำสั่งส่งคืนการยืนยันต่อไปนี้:
Database altered.
-
หากต้องการปิดใช้งานการบังคับแคชฐานข้อมูลแบบเต็ม ให้ใช้คำสั่งต่อไปนี้:
SQL> ALTER DATABASE NO FORCE FULL DATABASE CACHING;
คำสั่งส่งคืนการยืนยันต่อไปนี้:
Database altered.
บทสรุป
โดยสรุป ที่เก็บคอลัมน์ IM ช่วยลดเวลาดำเนินการสำหรับคำสั่ง DML และบังคับให้โหมดแคชฐานข้อมูลเต็มรูปแบบมีการปรับปรุงประสิทธิภาพที่สำคัญ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคุณลักษณะการปรับแต่งประสิทธิภาพใหม่ของ Oracle Database โปรดดูรายงานที่ Oracle Enterprise Manager (OEM) มีให้
ใช้แท็บคำติชมเพื่อแสดงความคิดเห็นหรือถามคำถาม
ข้อมูลอ้างอิง
แหล่งข้อมูลต่อไปนี้ถูกใช้เป็นข้อมูลอ้างอิงสำหรับโพสต์ในบล็อกนี้:
-
คู่มือการปรับแต่งประสิทธิภาพของฐานข้อมูล:ประโยชน์ด้านประสิทธิภาพของการใช้ที่เก็บคอลัมน์ในหน่วยความจำ
-
ฐานข้อมูลแคชในหน่วยความจำแบบเต็ม
-
การสาธิต Oracle Database 12c:ภาพรวมสถาปัตยกรรมการจัดเก็บคอลัมน์ในหน่วยความจำ