Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Zdarzenie oczekiwania:zmiana rozmiaru deskryptora asynchronicznego

W mojej niedawno zaktualizowanej produkcyjnej bazie danych widzę wiele instrukcji SQL, w przypadku których występują wysokie oczekiwania na zdarzenie „asynch deskryptor zmiany rozmiaru”. Niedawno zaktualizowałem wersję 11.1.0.7 do 11.2.0.2, a instrukcje SQL, które nigdy nie czekały na to wydarzenie, są teraz przechwytywane.

Oracle 11.2 nieznacznie zmienił sposób, w jaki baza danych i jądro systemu operacyjnego wykonywały asynchroniczne wywołania we/wy. Dzieje się tak, że istnieje wiele asynchronicznych deskryptorów we/wy, które będą w stanie obsłużyć asynchroniczne wywołania we/wy. Wraz ze wzrostem liczby asynchronicznych wywołań we/wy wzrasta również liczba deskryptorów. Gdy liczba asynchronicznych wywołań we/wy spada, liczba deskryptorów jest zmniejszana w podobny sposób.

Zanim firma Oracle będzie mogła zwiększyć liczbę deskryptorów, musi poczekać, aż wszystkie procesy, które aktualnie wykonują asynchroniczne operacje we/wy, zakończą swoje wywołania we/wy. Ta straszna akcja naprawdę zabija „asynchroniczną” część I/O! Gdy wszystkie procesy zakończą swoje wywołania ansych I/O, Oracle może zmienić deskryptory w górę lub w dół, w zależności od obciążenia.

Jeśli twój proces właśnie zakończył swoje asynchroniczne we/wy, zanim będzie mógł wykonać kolejne wywołanie asynchronicznego we/wy, musi poczekać, aż Oracle zmodyfikuje liczbę deskryptorów. W związku z tym czekasz na zdarzenie oczekiwania „zmiana rozmiaru deskryptora asynchronicznego”.

Wygląda na to, że jest to błąd 9829397 i możesz pobrać dla niego łatkę z Metalink. Ten problem został rozwiązany w 11.2.0.3, więc pojawia się tylko w 11.2.0.1 i 11.2.0.2. Jednym z obejść jest wyłączenie Asynch I/O, ale dla mnie to obejście jest wysoce niepożądane. Można również zredukować występowanie tego zdarzenia oczekiwania, redukując ich bezpośrednie we/wy i dostrajając instrukcje SQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak używać bieżącej daty w zapytaniu HQL z bazą danych Oracle?

  2. Pamięć podręczna wyników

  3. Ręcznie dodaj nową instancję RAC

  4. Używanie setDate w PreparedStatement

  5. _gc_fusion_compression