sql >> Databáze >  >> RDS >> Oracle

Událost čekání:změna velikosti asynchronního deskriptoru

V mé nedávno upgradované produkční databázi vidím řadu příkazů SQL, které nyní zažívají vysoké čekání na událost „asynch descriptor resize“. Nedávno jsem upgradoval z 11.1.0.7 na 11.2.0.2 a SQL příkazy, které nikdy nečekaly na tuto událost, jsou nyní zachyceny.

Oracle 11.2 mírně změnil způsob, jakým databáze a jádro OS prováděly asynchronní I/O volání. Dochází k tomu, že existuje řada asynchronních I/O deskriptorů, které jsou schopny zpracovat asynchronní I/O volání. Když se zvýší počet asynchronních I/O volání, zvýší se také počet deskriptorů. Když se počet asynchronních I/O volání sníží, počet deskriptorů se sníží podobným způsobem.

Než může Oracle zvýšit počet deskriptorů, musí počkat, až všechny procesy, které aktuálně provádějí asynchronní I/O, dokončí svá I/O volání. Tato hrozná akce skutečně zabíjí „asynchronní“ část I/O! Jakmile všechny procesy dokončí svá ansych I/O volání, může Oracle upravit deskriptory nahoru nebo dolů v závislosti na pracovní zátěži.

Pokud váš proces právě dokončil své asynchronní I/O, než může provést další asynchronní I/O volání, musí počkat, až Oracle upraví počet deskriptorů. Jako takový čekáte na událost čekání „asynch descriptor resize“.

Zdá se, že jde o chybu 9829397 a můžete si pro ni stáhnout opravu z Metalink. Tento problém je opraven v 11.2.0.3, takže se objevuje pouze v 11.2.0.1 a 11.2.0.2. Jedním z řešení je zakázat asynchronní I/O, ale pro mě je toto řešení vysoce nežádoucí. Výskyt této události čekání lze také omezit snížením jejich přímého I/O a vyladěním jejich příkazů SQL.


  1. MariaDB SUBSTR() Vysvětleno

  2. Jsou příkazy CASE a DECODE ekvivalentní?

  3. Proč nemohu udělat a s x jako (...) s ADODB a Oracle?

  4. Řešení problémů generátoru číselných řad – 1. část