SlideShare ist ein Scribd-Unternehmen logo
1 von 4
Anar Godjaev
http://anargodjaev.wordpress.com/
ROLLBACK SEGMENTLERİN OPTİMİZASYONU

Bir sorgu bir tablo üzerindeki row ve rowlar üzerinde değişiklik yapacaksa bu değişkliğin eski hali undo
segmentler üzerinde tutulur.Eğer rollback yaparsak eski değer bu rollback segmentten alınır ve yerine
konulur
Anar Godjaev
http://anargodjaev.wordpress.com/

Rollbak segmentlerin büyüklüğünü yaptığımız transactiona göre belirlememiz gerekir.Daha değişik
yöntemlerlede bu büyüklük ayarlşarı siz edilebilir.
Rollbak segmentlerin durumu ile ilgili yine çeşitli raporlar almak mümkündür.

SQL> SELECT class, count FROM v$waitstat
WHERE class LIKE ‘%undo%’;
yada
SQL> SELECT sum(value) FROM v$sysstat
WHERE name IN (‘db block gets‘, 'consistent gets‘);
yada
SQL> SELECT sum(waits)* 100 /sum(gets) "Ratio",
sum(waits) "Waits", sum(gets) "Gets"
FROM v$rollstat;
Anar Godjaev
http://anargodjaev.wordpress.com/
Her bir class için beklemem sürlerinin toplamının oranı % 1 den daha düşük olmalıdır.Eğer % 1 i geçerse
birkaç tane daha rollback segment tanımlamak gerekebilir.

Çok uzun çalışan transactionlar için large rollback tanımlamak gerekir.
SQL> SET TRANSACTION USE ROLLBACK SEGMENT large_rbs;
Yada
SQL> EXECUTE dbms_transaction.use_rollback_segment(’large_rbs‘);
Rollback data ayarlamak için yapılan transcation’un trü çok öenmlidir.
Delete işlemi çok maliyetlidir.
İnsert işlemleri minimum Rollback segment ihtiyacı duyar.
Update işleminin maliyeti kaç adet row’un işlem gördüğüne bağlıdır.
Aşağıdaki Sql cümlesi ile kontroller yapılabilir.
SQL> SELECT s.username, t.used_ublk, t.start_time
FROM v$transaction t, v$session s
WHERE t.addr = s.taddr;
Delete işlemleri çok fazla rollback segment kullandığı için eğer tüm tablo üzerinde bu işlem yapılıyorsa
kesinlikle truncate kullanılmalıdır.
Rollback segmentlerin kullanımını şu örneklede inceleyebilir.
Statementtan önce,
SQL> select usn,writes from v$rollstat;
USN WRITES
--------- --------0 1962
1 1102686
2 32538
3 1226096
SQL> update employees set salary=1000;
6560 rows updated.
Anar Godjaev
http://anargodjaev.wordpress.com/
Statementtan sonra,
SQL> select usn,writes from v$rollstat;
USN WRITES
--- ------0 1962
1 2232270
2 32538
3 1226096
Eğer düşük oranda rollback segment ihityacı görmek istiyorsak uzun cümlerde daha sık aralıkla commit
yapmalıyız.
Genellikle uzun çalışan sql cümlelerinde şu hatayı alırız.Snapshot too old.Bu hatanın sebebi.Başlayan bir
transcation devam ederken server proses rowların eski halini rollback segmentlerde bulamıyabilir.Rowların
eski halleri undo_retention paramtersi kadar rollbacklerde muhaza edilir.Eğer bu değeri geçen bir süre
işlem devam ederse rollback üzerindeki eski bloklara tekrar kullanım yapılır.Bu durumu engellemek için ya
undo_retention değeri arttırlmalıdr yada Undo segment boyutu arttırlmalıdır.
İstenirse rollback segmentler Autoextend yapılırak otomatik olarak büyümeleri sağlanabilir.
Undotablespace ler üzerinde kelem silme alter etme gibi işlemleri normal tablespace lerde olduğu gib
yapabilemteyiz.
SQL >ALTER TABLESPACE undotbs1
ADD DATAFILE ‘/u02/oradata/testdb/undotbs1_02.dbf’
AUTOEXTEND ON;
Aktif bir undo segmenti offline yapamayız.
SQL >ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS2; kullanılan undo segmenti bu komutla
switch edebiliriz
SQL >DROP TABLESPACE UNDOTBS_2;bu komutla tablespace i drop edebiliriz.
UNDO_MANAGEMENT: Undo yönetiminin otomatik yada Manuel olmasını sağlar.
UNDO_TABLESPACE: Undo için hangi tablespace’in aktif olduğunu belirler.
UNDO_SUPPRESS_ERRORS: Değeri True yapılırsa manuel yapılan işlemelrde hataları görmemizi sağlar.
UNDO_RETENTION: Rolback segmentte eski değerlerin ne kadar duracağını belirler.

Weitere ähnliche Inhalte

Mehr von Anar Godjaev

how to protect your sensitive data using oracle database vault
how to protect your sensitive data using oracle database vaulthow to protect your sensitive data using oracle database vault
how to protect your sensitive data using oracle database vaultAnar Godjaev
 
Database Vault / Verinin Güvenliği
Database Vault /  Verinin GüvenliğiDatabase Vault /  Verinin Güvenliği
Database Vault / Verinin GüvenliğiAnar Godjaev
 
Oracle 10g Database Server Kurulum
Oracle 10g Database Server KurulumOracle 10g Database Server Kurulum
Oracle 10g Database Server KurulumAnar Godjaev
 
DataPump ile Single Parititon Export
DataPump ile Single Parititon ExportDataPump ile Single Parititon Export
DataPump ile Single Parititon ExportAnar Godjaev
 
Redologlar ve Yöneti̇mi̇
Redologlar ve Yöneti̇mi̇Redologlar ve Yöneti̇mi̇
Redologlar ve Yöneti̇mi̇Anar Godjaev
 
Veri̇tabani ve Kullanici Yöneti̇mi̇
Veri̇tabani ve Kullanici Yöneti̇mi̇Veri̇tabani ve Kullanici Yöneti̇mi̇
Veri̇tabani ve Kullanici Yöneti̇mi̇Anar Godjaev
 
Instance ve Media Bozukluklarını Inceleme
Instance ve Media Bozukluklarını IncelemeInstance ve Media Bozukluklarını Inceleme
Instance ve Media Bozukluklarını IncelemeAnar Godjaev
 
Audit Mekani̇zmasi
Audit Mekani̇zmasiAudit Mekani̇zmasi
Audit Mekani̇zmasiAnar Godjaev
 
Backup and Recovery
Backup and RecoveryBackup and Recovery
Backup and RecoveryAnar Godjaev
 
Oracle Managed Files
Oracle Managed FilesOracle Managed Files
Oracle Managed FilesAnar Godjaev
 
Recovery Manager (RMAN)
Recovery Manager (RMAN)Recovery Manager (RMAN)
Recovery Manager (RMAN)Anar Godjaev
 
Oracle Enterprise Linux 5
Oracle Enterprise Linux 5Oracle Enterprise Linux 5
Oracle Enterprise Linux 5Anar Godjaev
 

Mehr von Anar Godjaev (20)

how to protect your sensitive data using oracle database vault
how to protect your sensitive data using oracle database vaulthow to protect your sensitive data using oracle database vault
how to protect your sensitive data using oracle database vault
 
Database Vault / Verinin Güvenliği
Database Vault /  Verinin GüvenliğiDatabase Vault /  Verinin Güvenliği
Database Vault / Verinin Güvenliği
 
Oracle 10g Database Server Kurulum
Oracle 10g Database Server KurulumOracle 10g Database Server Kurulum
Oracle 10g Database Server Kurulum
 
DataPump ile Single Parititon Export
DataPump ile Single Parititon ExportDataPump ile Single Parititon Export
DataPump ile Single Parititon Export
 
Redologlar ve Yöneti̇mi̇
Redologlar ve Yöneti̇mi̇Redologlar ve Yöneti̇mi̇
Redologlar ve Yöneti̇mi̇
 
Contraints
ContraintsContraints
Contraints
 
Oracle SQL
Oracle SQLOracle SQL
Oracle SQL
 
Veri̇tabani ve Kullanici Yöneti̇mi̇
Veri̇tabani ve Kullanici Yöneti̇mi̇Veri̇tabani ve Kullanici Yöneti̇mi̇
Veri̇tabani ve Kullanici Yöneti̇mi̇
 
Instance ve Media Bozukluklarını Inceleme
Instance ve Media Bozukluklarını IncelemeInstance ve Media Bozukluklarını Inceleme
Instance ve Media Bozukluklarını Inceleme
 
PL/SQL Blocks
PL/SQL BlocksPL/SQL Blocks
PL/SQL Blocks
 
Audit Mekani̇zmasi
Audit Mekani̇zmasiAudit Mekani̇zmasi
Audit Mekani̇zmasi
 
Parallel Server
Parallel ServerParallel Server
Parallel Server
 
Backup and Recovery
Backup and RecoveryBackup and Recovery
Backup and Recovery
 
Memory Management
Memory ManagementMemory Management
Memory Management
 
LogMiner
LogMinerLogMiner
LogMiner
 
Undo Management
Undo ManagementUndo Management
Undo Management
 
ASM
ASMASM
ASM
 
Oracle Managed Files
Oracle Managed FilesOracle Managed Files
Oracle Managed Files
 
Recovery Manager (RMAN)
Recovery Manager (RMAN)Recovery Manager (RMAN)
Recovery Manager (RMAN)
 
Oracle Enterprise Linux 5
Oracle Enterprise Linux 5Oracle Enterprise Linux 5
Oracle Enterprise Linux 5
 

Rollback Segmentleri̇n Opti̇mi̇zasyonu

  • 1. Anar Godjaev http://anargodjaev.wordpress.com/ ROLLBACK SEGMENTLERİN OPTİMİZASYONU Bir sorgu bir tablo üzerindeki row ve rowlar üzerinde değişiklik yapacaksa bu değişkliğin eski hali undo segmentler üzerinde tutulur.Eğer rollback yaparsak eski değer bu rollback segmentten alınır ve yerine konulur
  • 2. Anar Godjaev http://anargodjaev.wordpress.com/ Rollbak segmentlerin büyüklüğünü yaptığımız transactiona göre belirlememiz gerekir.Daha değişik yöntemlerlede bu büyüklük ayarlşarı siz edilebilir. Rollbak segmentlerin durumu ile ilgili yine çeşitli raporlar almak mümkündür. SQL> SELECT class, count FROM v$waitstat WHERE class LIKE ‘%undo%’; yada SQL> SELECT sum(value) FROM v$sysstat WHERE name IN (‘db block gets‘, 'consistent gets‘); yada SQL> SELECT sum(waits)* 100 /sum(gets) "Ratio", sum(waits) "Waits", sum(gets) "Gets" FROM v$rollstat;
  • 3. Anar Godjaev http://anargodjaev.wordpress.com/ Her bir class için beklemem sürlerinin toplamının oranı % 1 den daha düşük olmalıdır.Eğer % 1 i geçerse birkaç tane daha rollback segment tanımlamak gerekebilir. Çok uzun çalışan transactionlar için large rollback tanımlamak gerekir. SQL> SET TRANSACTION USE ROLLBACK SEGMENT large_rbs; Yada SQL> EXECUTE dbms_transaction.use_rollback_segment(’large_rbs‘); Rollback data ayarlamak için yapılan transcation’un trü çok öenmlidir. Delete işlemi çok maliyetlidir. İnsert işlemleri minimum Rollback segment ihtiyacı duyar. Update işleminin maliyeti kaç adet row’un işlem gördüğüne bağlıdır. Aşağıdaki Sql cümlesi ile kontroller yapılabilir. SQL> SELECT s.username, t.used_ublk, t.start_time FROM v$transaction t, v$session s WHERE t.addr = s.taddr; Delete işlemleri çok fazla rollback segment kullandığı için eğer tüm tablo üzerinde bu işlem yapılıyorsa kesinlikle truncate kullanılmalıdır. Rollback segmentlerin kullanımını şu örneklede inceleyebilir. Statementtan önce, SQL> select usn,writes from v$rollstat; USN WRITES --------- --------0 1962 1 1102686 2 32538 3 1226096 SQL> update employees set salary=1000; 6560 rows updated.
  • 4. Anar Godjaev http://anargodjaev.wordpress.com/ Statementtan sonra, SQL> select usn,writes from v$rollstat; USN WRITES --- ------0 1962 1 2232270 2 32538 3 1226096 Eğer düşük oranda rollback segment ihityacı görmek istiyorsak uzun cümlerde daha sık aralıkla commit yapmalıyız. Genellikle uzun çalışan sql cümlelerinde şu hatayı alırız.Snapshot too old.Bu hatanın sebebi.Başlayan bir transcation devam ederken server proses rowların eski halini rollback segmentlerde bulamıyabilir.Rowların eski halleri undo_retention paramtersi kadar rollbacklerde muhaza edilir.Eğer bu değeri geçen bir süre işlem devam ederse rollback üzerindeki eski bloklara tekrar kullanım yapılır.Bu durumu engellemek için ya undo_retention değeri arttırlmalıdr yada Undo segment boyutu arttırlmalıdır. İstenirse rollback segmentler Autoextend yapılırak otomatik olarak büyümeleri sağlanabilir. Undotablespace ler üzerinde kelem silme alter etme gibi işlemleri normal tablespace lerde olduğu gib yapabilemteyiz. SQL >ALTER TABLESPACE undotbs1 ADD DATAFILE ‘/u02/oradata/testdb/undotbs1_02.dbf’ AUTOEXTEND ON; Aktif bir undo segmenti offline yapamayız. SQL >ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS2; kullanılan undo segmenti bu komutla switch edebiliriz SQL >DROP TABLESPACE UNDOTBS_2;bu komutla tablespace i drop edebiliriz. UNDO_MANAGEMENT: Undo yönetiminin otomatik yada Manuel olmasını sağlar. UNDO_TABLESPACE: Undo için hangi tablespace’in aktif olduğunu belirler. UNDO_SUPPRESS_ERRORS: Değeri True yapılırsa manuel yapılan işlemelrde hataları görmemizi sağlar. UNDO_RETENTION: Rolback segmentte eski değerlerin ne kadar duracağını belirler.