07 October 2020

In-Memory Database Overview

In-Memory Database เป็นการจัดเก็บ data ทั้งหมดไว้ใน memory ทำให้การเข้าถึงข้อมูลรวดเร็วกว่าแบบเดิมที่ใช้ Disk ค่อนข้างมาก เพราะ memory มีการคำนวนซับซ้อนน้อยกว่า Disk และใช้งาน CPU ค่อนข้างต่ำ
ใน Oracle Database แบบเก่าจะเก็บข้อมูลในรูปแบบ row format ในระดับ physical level เพราะรูปแบบของการทำ transaction ของงาน OLTP อาจจะต้องการเข้าถึงข้อมูลคอลัมน์ทั้งหมดเพื่อบันทึกในเวลาเดียวกัน

Oracle In-Memory 12c
คือ feature ของ Oracle Database เหมาะกับงาน real-time analytics Data เพราะสามารถทำ mixed-workload enterprise OLTP ได้

โครงสร้างพื้นฐาน

In-Memory Dual-Format ของเวอร์ชั่น 12cR1
รูป In-Memory Dual-Format ของเวอร์ชั่น 12cR1
จาก https://www.doag.org/formes/pubfiles/8534096/2016-DB-Tirthankar_Lahiri-Database_In-Memory__A_Deep_Dive_and_a_Future_Preview-Manuskript.pdf


จากรูป
- ในเวอร์ชั่น 12cR1 ทำงานด้วยสถาปัตยกรรมแบบ Dual-Format คือ ข้อมูลของ Table ที่อยู่บน memory สามารถถูกเรียกใช้ในแบบ Row และ Column ได้พร้อมๆกัน โดยจะมี Oracle SQL Optimizer มาจัดการ Query
- การทำงานของ Oracle In-Memory จะ run ใน Oracle Database
- งาน OLTP จะ load Table มาเก็บบน memory ในรูปแบบ row format
- งาน Analytics จะ load Table มาเก็บบน memory ในรูปแบบ column format (รูปแบบ column format จะใช้ได้เฉพาะบน In-Memory เท่านั้น โดยไม่ต้องมีการ recovery เพราะมีการเก็บข้อมูลบน Disk ในแบบ row format อยู่แล้ว)

In-Memory Fast Start ของเวอร์ชั่น 12cR2
รูป In-Memory Fast Start ของเวอร์ชั่น 12cR2
จาก https://www.doag.org/formes/pubfiles/8534096/2016-DB-Tirthankar_Lahiri-Database_In-Memory__A_Deep_Dive_and_a_Future_Preview-Manuskript.pdf

จากรูป
- เวอร์ชั่น 12cR2 ปรับปรุงมาเป็นแบบใช้สถาปัตยกรรม Fast Start

อธิบายเพิ่มเติม

ข้อดีและข้อเสีย

ข้อดี
จาก http://www.dadbm.com/oracle-12c-in-memory-database-how-to-start/
- จำนวนข้อมูลที่เก็บบน memory สามารถเก็บได้มาก เพราะสามารถบีบอัดข้อมูลแบบ columnar compression ได้
- มีประสิทธิภาพที่เพิ่มขึ้นอย่างมากในงาน analytic และ reporting queries
- การทำงานของคำสั่ง DML ทำได้เร็วขึ้น เพราะมีการลบ index ที่ใช้สำหรับ analytical และสำหรับ performance ที่มีอยู่ออกให้มากที่สุด
- บน Disk เกิด I/O น้อยมาก
- มีความยืดหยุ่นและความละเอียดสูง โดยการโหลดเฉพาะ segments ของข้อมูลที่จะใช้งานเท่านั้นลงใน memory
- ไม่ต้องแก้ไขอะไรที่ Application
- การตั้งค่า setup In-Memory feature สามารถทำได้ง่าย
- ยังคงใช้ Oracle Database เหมือนเดิม แต่เพิ่มฟังชั่นการทำงานของ In-Memory เข้าไปเฉยๆ

ข้อเสีย
จาก http://www.dadbm.com/oracle-12c-in-memory-database-how-to-start/
- SYS objects ใน SYSTEM และ SYSAUX tablespace ไม่สามารถเก็บใน In-Memory
- ไม่สามารถใช้กับ Clustered table
- ไม่สามารถใช้กับ Column ที่ data type เป็น long

หลักในการเลือกใช้
จาก http://www.dadbm.com/oracle-12c-in-memory-database-how-to-start/
- ถ้าผู้ใช้มีปัญหาด้านประสิทธิภาพเกี่ยวกับงานด้านการค้นหาข้อมูล
- ถ้าไม่สามารถ tuning ในแบบอื่นๆได้
- ถ้าแอปพลิเคชันส่วนใหญ่ประกอบด้วยงาน analytics และ reporting queries ซึ่งส่วนใหญ่จะใช้คอลัมน์จำนวนน้อยแต่ส่งผลลัพธิ์กลับไปหลายแถว ซึ่งต่างจากงาน OLTP ที่ใช้แถวจำนวนน้อยแต่ส่งผลลัพธิ์กลับไปหลายคอลัมน์
- มีประโยชน์สำหรับระบบขนาดใหญ่ รวมถึงระบบที่เล็กกว่าก็สามารถแยกงานออกจาก I/O บน Disk มาทำที่ memory ได้
- ถ้าหากประสิทธิภาพของ In-Memory ทำงานได้ดีกว่าการต้องไปเพิ่ม Oracle license costs อื่น