เผยแพร่โดย TriCore เดิม: 12 เมษายน 2017
ชุดบทความ 2 ส่วนนี้ครอบคลุมฟีเจอร์ Performance Tuning ใหม่ใน Oracle® Database ส่วน 1 อภิปราย Oracle Database Version 12.1.0.1 บทความติดตามนี้ครอบคลุม Version 12.1.0.2
บทนำสู่ In-Memory Column Store
In-Memory Column Store (IM Column Store) เป็นพื้นที่ Optional ของ System Global Area (SGA) ที่จัดเก็บ Copies ของ Tables, Partitions และ Database Objects อื่นๆ ใน Columnar Format ที่ Optimized สำหรับ Rapid Scans IM Column Store เร่งความเร็ว Database Performance ของ Analytics, Data Warehousing และ Online Transaction Processing (OLTP) Applications
IM Column Store ทำงานอย่างไร
IM Column Store จัดเก็บ Copies ของ Database Objects ใน SGA มันไม่แทนที่ Database Buffer Cache ทั้งสอง Memory Areas สามารถจัดเก็บข้อมูลเดียวกันใน Format ที่ต่างกัน Rows ที่จัดเก็บใน IM Column Store ถูกแบ่งเป็น Large Memory Regions ใน Columnar Format Column หนึ่งอยู่แยกต่างหากใน Contiguous Area ของ Memory ภายในแต่ละ Region
คุณสามารถเปิดใช้งาน IM Column Store สำหรับ Database Objects ต่อไปนี้ได้:
- Tables
- Materialized Views
- Partitions
- Tablespaces
คุณสามารถจัดเก็บ Columns ทั้งหมดของ Table ใน IM Column Store หรือแค่ Subset ของมัน เช่นเดียวกันสำหรับ Partitioned Table คุณสามารถจัดเก็บ Partitions ทั้งหมดของ Table หรือแค่ Subset ของมัน หากคุณเปิดใช้งาน IM Column Store ที่ระดับ Tablespace Oracle Database จะเปิดใช้งาน Tables และ Materialized Views ทั้งหมดใน Tablespaces สำหรับ IM Column Store อัตโนมัติ
ประโยชน์ด้าน Performance จากการใช้ IM Column Store
การจัดเก็บ Database Objects ใน Memory แทน Disk ทำให้ Oracle Database ทำ Scans, Queries, Joins และ Aggregates เร็วกว่ามาก IM Column Store สามารถเพิ่ม Performance เมื่อทำ Tasks ต่อไปนี้:
- Scanning จำนวน Rows มากและใช้ Filters
- Querying Subset เล็กของ Columns ชุดใหญ่
- Joining Table เล็กกับ Table ใหญ่ โดยเฉพาะเมื่อ Join Conditions Filter Rows ส่วนใหญ่
- Aggregating Data ใน Query
IM Column Store ยังเพิ่ม Performance ของ Data Manipulation Language (DML) Statements ระบบ OLTP มักต้องการ Indexes มากที่สร้างบน Columns ที่เข้าถenseit่อไป Indexes เหล่านี้อาจมี Negative Impact บน Performance ของ DML Statements การจัดเก็บ Database Object ใน IM Column Store ทำให้ Indexes เหล่านี้ Unnecessary เพราะ Scans รันเร็วมาก การ Eliminate Indexes ที่ Unnecessary ปรับปรุง Performance ของ DML Statements เพราะมี Indexes น้อยกว่าที่ต้อง Update

แหล่งที่มารูปภาพ: Oracle Learning Library YouTube Videos: Oracle Database 12c Demos: In-Memory Column Store Architecture Overview
การประมาณขนาดที่จำเป็นของ IM Column Store
IM Column Store รองรับ Compression Methods ต่อไปนี้:
| Compression Method | ลำดับการ Compress ข้อมูล In-Memory | การเปรียบเทียบ Compression ของ In-Memory Data |
|---|---|---|
| NO MEMCOMPRESS | 1 | NIL |
| MEMCOMPRESS FOR DML | 2 (Least Compression) | B<all |
| MEMCOMPRESS FOR QUERY LOW | 3 | B<C<D |
| MEMCOMPRESS FOR QUERY HIGH | 4 | C<D<E |
| MEMCOMPRESS FOR CAPACITY LOW | 5 | D<E<F |
| MEMCOMPRESS FOR CAPACITY HIGH | 6 (High Compression) | all<F |
ตัวอย่างต่อไปนี้แสดงวิธีเปิดใช้งาน Table oe.product_information สำหรับ IM Column Store และระบุ Compression Method MEMCOMPRESS FOR CAPACITY HIGH:
SQL>ALTER TABLE oe.product_information INMEMORY MEMCOMPRESS FOR CAPACITY HIGH; การกำหนดขนาด IM Column Store
หลังจากคุณกำหนด Memory ที่จำเป็นสำหรับจัดเก็บ Database Objects ใน IM Column Store แล้ว คุณสามารถตั้งค่าขนาดได้โดยใช้ Initialization Parameter INMEMORY_SIZE
ใช้ขั้นตอนต่อไปนี้เพื่อตั้งค่าขนาด IM Column Store:
-
ตั้งค่า Initialization Parameter
INMEMORY_SIZEเป็นขนาดที่จำเป็นค่า Default สำหรับ Parameter นี้คือ
0หมายความว่า IM Column Store ไม่ได้ถูกใช้งาน เพื่อเปิดใช้งาน IM Column Store ให้ตั้งค่า Parameter นี้เป็นค่า Non-Zeroใน Multitenant Environment คุณสามารถระบุขนาด IM Column Store สำหรับแต่ละ Pluggable Database (PDB) โดยตั้งค่า Parameter นี้ต่อ PDB ผลรวมของค่าสำหรับ PDBs ไม่จำเป็นต้องเท่ากับค่าสำหรับ Container Database (CDB) และอาจมากกว่า
-
หลังจากตั้งค่าขนาด IM Column Store แล้ว คุณต้อง Restart Database Instance เพื่อให้มันสามารถจัดเก็บ Database Objects ได้
ตัวอย่างต่อไปนี้แสดงวิธีตั้งค่าขนาด IM Column Store เป็น 100 GB:
ALTER SYSTEM SET INMEMORY_SIZE = 100G;
Manageability Support สำหรับ IM Column Store
SQL Monitor Report, Active Session History (ASH) Report และ Automatic Workload Repository (AWR) Report ตอนนี้แสดง Statistics สำหรับ In-Memory Operations ต่างๆ
Database Caching Modes
มี Database Caching Modes 2 แบบ:
- Default Database Caching Mode ที่ Version ก่อนหน้าของ Oracle Database ใช้
- Force Full Database Caching Mode ที่ใหม่ใน Oracle Database 12c Release 1 (12.1.0.2)
Default Database Caching Mode
โดย Default Oracle Database ใช้ Default Database Caching Mode เมื่อทำ Full Table Scans
หาก Oracle Database Instance กำหนดว่ามีพื้นที่เพียงพอที่จะ Cache Full Database ใน Buffer Cache และมีประโยชน์ที่จะทำเช่นนั้น Instance จะ Cache Full Database ใน Buffer Cache อัตโนมัติ
หาก Instance กำหนดว่าไม่มีพื้นที่เพียงพอที่จะ Cache Full Database ใน Buffer Cache มันจะทำ Actions ต่อไปนี้:
- Smaller Tables ที่น้อยกว่า 2% ของ Buffer Cache Size: โหลด Tables เหล่านี้เข้า Memory
- Medium-sized Tables: วิเคราะห์ Interval ระหว่าง Last Table Scan และ Aging Timestamp ของ Buffer Cache หากขนาด Table ที่ Reuse ใน Last Table Scan มากกว่า Remaining Buffer Cache Size ให้ Cache Table
- Large Tables: ไม่โหลดเหล่านี้เข้า Memory เว้นแต่คุณจะ Declare Table สำหรับ
KEEPBuffer Pool อย่างชัดเจน
Force Full Database Caching Mode
Force Full Database Caching Mode ช่วยให้คุณ Cache Entire Database ใน Memory ซึ่งอาจให้ Performance Improvements ที่มากเมื่อทำ Full Table Scans หรือเข้าถึง Large Objects (LOBs)
ใน Default Caching Mode Oracle Database ไม่ได้ Cache Underlying Data เสมอเมื่อ User Query Large Table ใน Force Full Database Caching Mode Oracle Database สมมติว่า Buffer Cache ใหญ่พอที่จะ Cache Full Database และพยายาม Cache ทุก Blocks ที่ Queries เข้าถึง มันสำเร็จเมื่อขนาด Database น้อยกว่า Database Buffer Cache Size
Oracle Database โหลด Data Files ทั้งหมดเข้า Buffer Cache เมื่อถูกเข้าถึง รวมถึง NOCACHE LOBs และ LOBs ที่ใช้ Oracle Database SecureFiles

แหล่งที่มารูปภาพ: Full DB In-Memory Caching.
เมื่อไหร่ควรใช้ Force Full Database Caching Mode
พิจารณาใช้ Force Full Database Caching Mode ในสถานการณ์ต่อไปนี้:
- Logical Database Size (หรือ Actual Used Space) น้อยกว่า Individual Buffer Cache ของแต่ละ Database Instance ใน Oracle Real Application Clusters (RAC) Environment คำแนะนำนี้ใช้ได้กับ Non-Oracle RAC Databases ด้วย
- Logical Database Size น้อยกว่า 80% ของ Combined Buffer Cache Sizes ของทุก Database Instances สำหรับ Well-Partitioned Workloads (By Instance Access) ใน Oracle RAC Environment
- Database ใช้
SGA_TARGETหรือMEMORY_TARGET NOCACHELOBs ต้องการถูก CacheNOCACHELOBs ไม่เคยถูก Cache เว้นแต่จะใช้ Force Full Database Caching
ใน 3 สถานการณ์แรก คุณควร Monitor System Performance เป็นระยะเพื่อตรวจสอบว่า Performance Indicators ตรงตาม Expectations ของคุณหรือไม่
หมายเหตุ: เมื่อ Oracle RAC Database Instance หนึ่งใช้ Force Full Database Caching Mode แล้ว Database Instances อื่นๆ ทั้งหมดใน Oracle RAC Environment ก็จะใช้ Mode นี้เช่นกัน ใน Multitenant Environment Force Full Database Caching Mode ใช้กับ CDB ทั้งหมด รวมถึง PDBs ทั้งหมดของมัน
ตั้งค่าและตรวจสอบ Database Caching Mode
แรก ตรวจสอบ Database และ Memory Size คุณสามารถ Exclude 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 ใช้คำสั่งต่อไปนี้เพื่อตรวจสอบขนาด Buffer Cache:
SQL> SELECT round(sum(cnum_set * blk_size)/1024/1024) size_mb FROM X$KCBWDS; SIZE_MB ------- 5283 ใช้ขั้นตอนต่อไปนี้เพื่อตั้งค่า Database สำหรับ Force Full Database Caching:
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. ใช้ขั้นตอนต่อไปนี้เพื่อตรวจสอบว่า Force Full Database Caching Mode เปิดใช้งานแล้ว:
-
ใช้คำสั่งต่อไปนี้เพื่อ Query
V$DATABASEView:SQL>SELECT FORCE_FULL_DB_CACHING FROM V$DATABASE;Output จะเป็น
YESหรือNO -
เพื่อเปิดใช้งาน Force Full Database Caching Mode ใช้คำสั่ง
ALTER DATABASEต่อไปนี้:ALTER DATABASE FORCE FULL DATABASE CACHING;คำสั่งคืนค่า Confirmation ต่อไปนี้:
Database altered. -
เพื่อปิดใช้งาน Force Full Database Caching ใช้คำสั่งต่อไปนี้:
SQL> ALTER DATABASE NO FORCE FULL DATABASE CACHING;คำสั่งคืนค่า Confirmation ต่อไปนี้:
Database altered.
สรุป
สรุป IM Column Store ลด Execution Time สำหรับ DML Statements และ Force Full Database Caching Mode ให้ Performance Improvements ที่มาก สำหรับข้อมูลเพิ่มเติมเกี่ยวกับฟีเจอร์ Performance Tuning ใหม่ของ Oracle Database ดู Reports ที่ Oracle Enterprise Manager (OEM) จัดให้
ใช้แท็บ Feedback เพื่อแสดงความคิดเห็นหรือถามคำถาม
อ้างอิง
แหล่งข้อมูลต่อไปนี้ถูกใช้เป็น Reference สำหรับบทความบล็อกนี้:
-
Database Performance Tuning Guide: Performance Benefits of Using the In-Memory Column Store
-
Full DB In-Memory Caching
-
Oracle Database 12c Demos: In-Memory Column Store Architecture Overview