Gökhan Atıl
• DBATakım Lideri
• 10 yıldan fazla deneyim
• 10g/11g/R12 OCP DBA
• Oracle Certified Expert (SQL & Exadata)
• Comptia Linux+
• Blogger (Ekim 2008’den beri) gokhanatil.com
• Turkish Oracle User Group Kurucu Üyesi (TROUG)
• Oracle ACE (Ekim 2011)
3.
Expert Oracle EnterpriseManager 12c
Kellyn Pot'vin
Anand Akela
Gökhan Atıl
Bobby Curtis
Alex Gorbachev
Niall Litchfield
Leighton Nelson
Pete Sharman
25 Haziran 2013
4.
Sunum İçeriği
Oracle DatabaseIn-Memory Nedir?
Neden In-Memory?
Oracle Database In-Memory’nin Yapısı
Performans Karşılaştırması
Nasıl Kullanılır?
Son Söz
5.
Oracle Database In-MemoryNedir?
Database (storage structures)
Instance
(System Global Area)
Background Process
PMONSMONDBWn LGWRCKPT ARCn
Database
Buffer
Cache Shared Pool
In-Memory
Area
IMCO
SP LP JP RL
nK
6.
Neden In-Memory?
• Memory’den1 MB sırasız veri okuma 0.25 ms
• SSD’den 1 MB sırasız veri okuma 1 ms
• Sabit Disk’ten 1 MB sırasız veri okuma 20 ms
Oracle ve KolonFormatı?
• Sadece In-memory’de
kullanılıyor
• Sıkıştırma sayesinde veri
x2-x20 kat daha az yer
kaplıyor (MEMCOMPRESS)
• Logging Gerektirmiyor
(recovery edilmesine gerek
yok çünkü satır formatı
halinde zaten diskte
tutuluyor)
• Startup sırasında tablolar
belleğe alınıyorlar
(PRIORITY)
Memory
Kolon formatı
10.
SIMD
Neden Kolon Formatı?
In-MemoryColumn Store
Şehir SatışlarSales
Örnek: İstanbul’daki satış toplamını bulmak
1. Sadece gerekli kolon verisine
erişim!
2. Yeni algoritma sayesinde
sıkıştırılmış veri içinde arama
3. IM Storage Index sayesinde ilgisiz
verinin filtrelenmesi (IMCU)
4. SIMD Vektör İşleme ile değerlerin
tek komut ile karşılaştırılması
İstanbul 5,000,000 TL
11.
SIMD Vektör İşlemeNedir?
• SIMD (Single Instruction processing Multiple Data values) vektör
işleme, SIMD desteği olan sunucularda her kolondaki veriyi tek tek
işlemek yerine, birden fazla kolondaki verinin beraberce tek bir
CPU dönüşünde ile işlenmesini sağlar.
• Modern Intel işlemciler 16-32 SIMD registerlarına sahiptir.
12.
İki Kopya (Disk+RAM)Yavaşlatmaz mı?
Tablo
1-3
OLTP içim
İndeksler
5-15
Analitik Sorgular için
İndeksler
13.
Performans Karşılaştırması
• TanelPõder & Kerry Osborne’nun Exadata
üzerinde yaptığı testler:
SELECT COUNT(*), SUM(order_total)
FROM
orders
WHERE
warehouse_id BETWEEN 500 AND 510
8 GB’lık tablonun %1’ini
seçmek istiyoruz
14.
Test Sonuçları:
Erişim metoduToplam CPU(ms)
index (range scan) 265203 37438
full table scan (buffered) 132075 48944
full table scan (direct path) 15567 11808
full table scan (smart scan) 2102 729
full table scan (inmemory) 155 155
15.
In-Memory Hızlı Pekiya Buffer Cache?
Erişim metodu Toplam CPU(ms)
full table scan (smart scan) 2102 729
full table scan (inmemory) 155 155
full table scan (buffer cache) 7850 7831
1. Sadece gerekli kolon verisine erişim
2. Yeni algoritma sayesinde sıkıştırılmış veri içinde arama
3. IM Storage Index sayesinde ilgisiz verinin filtrelenmesi
4. SIMD Vektör İşleme
16.
In-Memory ve Verilerinİşlenmesi
• Veriye erişim her zaman hızlı olmasına karşın,
özellikle TEMP tablespace’i kullanılan
sorgularda verinin işlenmesi darboğaz
oluşturabilir:
Sorgularınızın TEMP tablespace’i kullanmadığına
emin olun
Verinin filtrelenmesini önce yapın
PGA_AGGREGATE_TARGET’ı (ve paralelismi)
arttırın
17.
Nasıl Kullanılır?
• DatabaseIn-Memory Opsiyonunu
etkinleştirmek:
ALTER SYSTEM SET inmemory_size = 20G
SCOPE=spfile;
• Veritabanını restart etmeniz gerekir.
• SGA’nin yeterince büyük olmasına dikkat edin!
18.
Nasıl Kullanılır?
• İstediğiniztablo için In-Memory opsiyonunu
aktif hale getirmek:
ALTER TABLE sales INMEMORY;
• Tablolar in-memory area’ya (IM Column
Store) varsayılan olarak on-demand olarak
yüklenir.
19.
Nasıl Kullanılır?
• Tablonunotomatik olarak In-Memory’ye
yüklenmesi için:
ALTER TABLE sales INMEMORY PRIORITY
CRITICAL;
• PRIORITY şunlardan biri olabilir: NONE
(varsayılan), LOW, MEDIUM, HIGH, CRITICAL
20.
Nasıl Kullanılır?
• V$IM_SEGMENTSveya V$IM_USER_SEGMENTS’ı
sorgulayarak tablolarınız in-memory’de mi
görebilirsiniz:
SELECT
OWNER, SEGMENT_NAME,
INMEMORY_SIZE, BYTES, BYTES_NOT_POPULATED,
POPULATE_STATUS
FROM v$im_segments;
21.
Nasıl Kullanılır?
Şu objelerIn-Memory’de tutulamaz:
• SYSTEM or SYSAUX tablespace’indeki SYS
objeleri
• Index Organized Tablolar (IOTs)
• Clustered Tablolar
• LONG veritipindeki kolonlar
22.
Nasıl Kullanılır?
• İstediğinizkolon ve partitionların In-Memory
area’ya yüklenmesini engelleyebilirsiniz:
ALTER TABLE sales INMEMORY
NO INMEMORY(prod_id);
ALTER TABLE sales MODIFY PARTITION
SALES_1998 NO INMEMORY;
23.
Nasıl Kullanılır?
• Tablonunveya partitionın nasıl sıkıştırılacağını
belirtebilirsiniz:
ALTER TABLE sales INMEMORY
MEMCOMPRESS FOR QUERY;
ALTER TABLE sales MODIFY PARTITION
SALES_1998 INMEMORY NOMEMCOMPRESS;
24.
Nasıl Kullanılır?
• MEMCOMPRESSparametresi:
NOCOMPRESS Sıkıştırma yok
MEMCOMPRESS FOR DML
DML işlemleri için optimize edilmiş
minimum sıkıştırma
MEMCOMPRESS FOR QUERY LOW Varsayılan (Sorgu performansı için optimize)
MEMCOMPRESS FOR QUERY HIGH
Hem sorgu performansı hem yer kullanımı
açısından iyi
MEMCOMPRESS FOR CAPACITY LOW
Sorgu performansından çok yer kullanımını
düşünen
MEMCOMPRESS FOR CAPACITY HIGH
Tamamen yer kullanımını azaltmak için
tasarlanmış
25.
Son Söz
• Fonksiyonel:Her hangi bir SQL kısıtlaması yok
• Uygulanması Kolay: Verinin aktarılmasına
veya değiştirilmesine gerek yok
• Tamamen Uyumlu: Uygulamalarda her hangi
bir değişiklik gerektirmiyor
• Partitioning ile Birlikte Enterprise Edition
kullanmak için en geçerli sebep
26.
KAYNAKLAR:
@gokhanatil http://gokhanatil.com
Tanel Põder& Kerry Osborne’sunumu Oracle Database In‐Memory Option in Action
Oracle Database In-Memory blog https://blogs.oracle.com/In-Memory/
Oracle Database In-Memory White Paper Ekim 2014
Editor's Notes
#3 This is another option for an Overview slides using transitions.