Bu konuya nereden geldik öncelikle biraz ondan bahsetmek istiyorum. 11gr2 upgrade’ lerimiz sonrasında kimi test ortamlarımızdan aşağıdaki alert logda detayını görebileceğiniz gibi sıkça ORA-04031 hataları görmeye başlamıştık. Sorunu aslında ilk başlangıçda utlrp’ yi çalıştırdığımızda aldığımızı farkettik. Aslında hatada kendi içerisinde problemin kaynağını işaret ediyordu. Shared memoryde bir darboğaz yaşanıyor ama neden utlrp çalışırken bu hatayı alıyorduk ?
Biraz araştırınca problemin utlrp ile ilişkisinide bulmuş olduk. Problemin asas kaynağı large pool’ daki memory problemi idi. Utlrp’ yi çalıştırdığınızda aslında oracle arka tarafda (database’nizin kaynaklarına bağlı olarak) bu işlemi parallel process ler çalıştırarak yapmaya çalışıyor. Parallel processler de large pool’ dan beslendiği için buradaki bir memory problemide bizi aşağıdaki gibi bir hataya götürüyordu.
Nasıl düzeltebiliriz, sorunun aslında en bilindik cevabı memory artışıdır. Peki ya memory’ i artıramıyorsak veya artırmak istemiyorsak ne yapabiliriz. (Bizdeki durumda da bu hataları bazı test ortamlarımızdan aldığımız için sırf bu yüzden bir memory artışına gitmek istemedik) Memory’ i artırmak istemiyorsak, o zaman large pool içerisindeki memory talebini azaltmamız gerekecektir. Parallel processlerin large pool’ dan beslendiğini söylemiştik peki sistemdeki parallel processlere müdahale etsek ve bu parallel processleri sınırlandırsak olmaz mı? Neden olmasın. Bunu nasıl yapabiliriz ;
SQL>alter system set PARALLEL_MAX_SERVERS=5 scope=both;
System altered.
SQL>alter system set PARALLEL_SERVERS_TARGET=2 scope=both;
System altered.
Alert LOG DETAYI ;
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
Wed Oct 03 14:18:58 2012
Errors in file /u01/ora/diag/rdbms/test/test/trace/test_p002_5125.trc (incident=9897):
ORA-04031: unable to allocate 973600 bytes of shared memory (“large pool”,”unknown object”,”large pool”,”PX msg pool”)
Incident details in: /u01/sq/ora_1/oracle/diag/rdbms/test/test/incident/incdir_9897/test_p002_5125_i9897.trc
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
Errors in file /u01/ora/diag/rdbms/test/test/trace/test_p002_5125.trc (incident=9898):
ORA-04031: unable to allocate 486816 bytes of shared memory (“large pool”,”unknown object”,”large pool”,”PX msg pool”)
Incident details in: /u01/sq/ora_1/oracle/diag/rdbms/test/test/incident/incdir_9898/test_p002_5125_i9898.trc
Dumping diagnostic data in directory=[cdmp_20121003141900], requested by (instance=1, osid=5125 (P002)), summary=[incident=9897].
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
Wed Oct 03 14:19:01 2012
Errors in file /u01/ora/diag/rdbms/test/test/trace/test_p000_5117.trc (incident=9857):
ORA-04031: unable to allocate 973600 bytes of shared memory (“large pool”,”unknown object”,”large pool”,”PX msg pool”)
Incident details in: /u01/sq/ora_1/oracle/diag/rdbms/test/test/incident/incdir_9857/test_p000_5117_i9857.trc
Dumping diagnostic data in directory=[cdmp_20121003141901], requested by (instance=1, osid=5125 (P002)), summary=[incident=9898].
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
Errors in file /u01/ora/diag/rdbms/test/test/trace/test_p000_5117.trc (incident=9858):
ORA-04031: unable to allocate 486816 bytes of shared memory (“large pool”,”unknown object”,”large pool”,”PX msg pool”)
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
Dumping diagnostic data in directory=[cdmp_20121003141902], requested by (instance=1, osid=5117 (P000)), summary=[incident=9857].
Wed Oct 03 14:19:25 2012
Errors in file /u01/ora/diag/rdbms/test/test/trace/test_p012_5165.trc (incident=9985):
ORA-04031: unable to allocate 973600 bytes of shared memory (“large pool”,”unknown object”,”large pool”,”PX msg pool”)
ORA-10387: parallel query server interrupt (normal)
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
Errors in file /u01/ora/diag/rdbms/test/test/trace/test_p012_5165.trc (incident=9986):
ORA-04031: unable to allocate 486816 bytes of shared memory (“large pool”,”unknown object”,”large pool”,”PX msg pool”)
ORA-10387: parallel query server interrupt (normal)
Use ADRCI or Support Workbench to package the incident.
Son olarak utlrp kullanımı ile ilgili olarak benzer problemleri yaşayanlar için çok güzel iki kaynak ;
Note.230136.1 – Where Can I Find the Parallel Version of Utlrp.sql?
Note.564605.1 – Utlrp.Sql Is Taking Too Long To Complete
Umarım faydalı olmuştur.
Çok güzel ve faydalı bir yazı. Teşekkürler Kamil…