Benchmark Oracle: Binds & Commit

Para demonstração no Curso de Performance Diagnostics & Tuning, fiz um rápido Benchmark para analisarmos as consequências de uma aplicação que não é desenhada corretamente para o Oracle Database.

Fiz 4 scripts que executam 10000 Inserts de um único NUMBER sequencial em uma tabela vazia, de apenas uma coluna.

oracle@rproni-laptop:~$ ls -l *.pl
-rw-r--r-- 1 oracle oinstall 629 2010-03-22 16:49 NoCommit_NoBinds.pl
-rw-r--r-- 1 oracle oinstall 630 2010-03-22 16:48 NoCommit_WithBinds.pl
-rw-r--r-- 1 oracle oinstall 629 2010-03-22 17:12 WithCommit_NoBinds.pl
-rw-r--r-- 1 oracle oinstall 630 2010-03-22 16:49 WithCommit_WithBinds.pl

– O primeiro script é o método correto de se desenvolver uma aplicação que utiliza o Oracle Database, pois ele utiliza variáveis Binds, e só executa Commit ao término na regra de negócio.

– O segundo script utiliza variáveis Literais ao invés de Binds, mas utiliza o Commit corretamente, como o script acima.

– O terceiro script executa Commit logo após cada um dos 10000 Inserts, mas utiliza Binds corretamente.

– O quarto script é o pior caso, pois além do Commit automático, não utiliza variáveis Bind.

Abaixo, o resultado da medição do tempo de execução e uso de CPU de cada um deles. Decida qual é o melhor. 🙂

oracle@rproni-laptop:~$ time perl NoCommit_WithBinds.pl; time perl NoCommit_NoBinds.pl; time perl WithCommit_WithBinds.pl; time perl WithCommit_NoBinds.pl
real    0m14.061s
user    0m3.916s
sys    0m0.908s

real    0m24.219s
user    0m3.748s
sys    0m0.972s

real    2m43.231s
user    0m5.532s
sys    0m1.172s
real    2m46.057s
user    0m4.432s
sys    0m1.132s

É interessante notar que os Scripts que executam os métodos incorretos, demoram muito mais tempo, mas consumem quase o mesmo de CPU. É por isso que achamos que “o Banco está tranquilo” enquanto o TEMPO de resposta da aplicação está péssimo. O tempo é gesto em WAITs, e não em CPU.

oracle@rproni-laptop:~$ time perl NoCommit_WithBinds.pl; time perl NoCommit_NoBinds.pl; time perl WithCommit_WithBinds.pl; time perl WithCommit_NoBinds.pl

real    0m14.061s
user    0m3.916s
sys    0m0.908s

real    0m24.219s
user    0m3.748s
sys    0m0.972s

real    2m43.231s
user    0m5.532s
sys    0m1.172s

real    2m45.163s
user    0m5.652s
sys    0m1.236s

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.