Ola  Pessoal
Eu preciso saber o tempo de execução aproximado de uma consulta sql,
mas considerando que os dados já estão em cache.
Também preciso garantir que os dados armazenados em cache de outras
consultas sejam apagados para nao interferir no teste.
Eu acredito que para saber o tempo (mais aproximado possivel) de uma
consulta, será necessário fazer o processo "warm up" (aquecimento) da
consulta, permitindo que os dados se acomodem em cache.

Abaixo estão as etapas sugeridas por um colega para mim:

    Passo 1 - coletar estatistica para todas as tabelas envolvidas;
    Etapa 2 - reinicie o SGBD (para limpar o cache do SGBD);
    Etapa 3 - apague o cache do sistema operacional  (echo
3>/proc/sys/vm/drop_caches; on Debian8)
    Etapa 4 - execute pelo menos 6 vezes a mesma consulta.

Após a execucao de 6 vezes a mesma consulta, deve-se pegar o tempo da
consulta que está na "mediana" entre todos. Mas deve-se desconsiderar
a primeira execucao, que teoricamente demoraria mais, pois o SGBD
estara com o cache limpo.

Exemplo:
    Execução 1: 18m 58s (excluida)
    Execução 2: 16m 51s
    Execução 3: 17m 59s
    Execução 4: 17m 55s
    Execução 5: 17m 07s
    Execução 6: 17m 05s

Neste caso, para calcular a mediana, você deve primeiro ordenar cada
execução pelo seu tempo:

    Execução 2: 16m 51s
    Execução 6: 17m 05s
    Execução 5: 17m 07s
    Execução 4: 17m 55s
    Execução 3: 17m 59s

Neste exemplo, a mediana seria a execução 5 (17m 07s).

Alguém poderia me dizer se esta é uma boa estratégia, para se obter o
tempo mais aproximado de uma consulta SQL?
Devido a ser um trabalho academico, se alguém tiver uma referência de
qualquer artigo ou livro sobre este assunto, seria muito útil.

Estou executando um benchmark de banco de dados (Tpc-h
www.tpc.org/tpch), a carga de trabalho possui 22 consultas analíticas
(OLAP).

[ ]`s  Neto

Responder a