Um dos horrores para uma base de dados OLTP ou para algum processamento puramente transacional, são os Redo Logs e todos os componentes de garantia de consistência.
Um dos eventos mais conhecidos é “log file sync”. Obviamente, que há diversas formas de minimizar o impacto deste evento.
Uma delas que vou aqui mostrar, é com a alteração dos parâmetros commit_logging e commit_wait.
Uma breve descrição destes parâmetros:
1) commit_nologging:
– Controla como o Oracle irá agrupar as escritas em redo (Log Writer)
– Permite os valores IMMEDIATE e BATCH
2) commit_wait:
– Permite o controle de como o Oracle descarrega as informaçoes para redo log
– Permite os valores NOWAIT, WAIT e FORCE_WAIT
Para efeito de testes, utilizei a ferramenta criado por Dominic Giles, o Swingbench, para gerar carga e poder comparar o comportamentos do evento log file sync, com os parametros alterados ou não.
Os testes 1 e 2, os valores dos parâmetros estavam conforme abaixo:
- COMMIT_LOGGING=BATCH
- COMMIT_WAIT=NOWAIT
Os testes 3 e 4, não houve alteração do default, ou seja:
- alter system reset commit_logging;
- alter system reset commit_nowait;
Segue resutado abaixo, retirado das estatisticas de BD, coletados pela ferramenta:
- 1_com_alteracao_teste.txt: <DatabaseWaitEvent name=”log file sync” noOfTimesWaited=”6″ timeWaited=”55″ percentageTimeWaited=”0.02″/>
- 2_com_alteracao_teste.txt: <DatabaseWaitEvent name=”log file sync” noOfTimesWaited=”11″ timeWaited=”61″ percentageTimeWaited=”0.02″/>
- 3_sem_alteracao_teste.txt: <DatabaseWaitEvent name=”log file sync” noOfTimesWaited=”3690″ timeWaited=”72895″ percentageTimeWaited=”21.96″/>
- 4_sem_alteracao_teste.txt: <DatabaseWaitEvent name=”log file sync” noOfTimesWaited=”3815″ timeWaited=”73244″ percentageTimeWaited=”24.29″/>
É uma redução considerável.
Em termos de transaçoes por segundo, obviamente que há uma melhoria também:
-
1_com_alteracao_teste.txt: <AverageTransactionsPerSecond>10.25</AverageTransactionsPerSecond>
-
2_com_alteracao_teste.txt: <AverageTransactionsPerSecond>10.12</AverageTransactionsPerSecond>
-
3_sem_alteracao_teste.txt: <AverageTransactionsPerSecond>8.89</AverageTransactionsPerSecond>
-
4_sem_alteracao_teste.txt: <AverageTransactionsPerSecond>8.53</AverageTransactionsPerSecond>
Deve-se ter cuidado com a utilização deste parâmetro, porque pode levar a perca de dados em caso de crash.
Fonte:
http://docs.oracle.com/cd/E11882_01/server.112/e25513/initparams033.htm#REFRN10266
http://docs.oracle.com/cd/E11882_01/server.112/e25513/initparams031.htm#REFRN10265