Estou otimizando nosso banco de dados. Essencialmente, estou tentando encontrar as tabelas mais escritas e mais lidas em nosso banco de dados. Depois disso, continuarei vinculando essas tabelas a unidades separadas.
Existe uma maneira de seguir cada atividade de tabelas? Como a seguir IOPS, gravações, leituras por tabela?
Método 1
Se você estiver usando Percona Server ou MariaDB (>= 5.2), você pode simplesmente definir a variável userstat/userstat_running para habilitar um monte de novas tabelas INFORMATION_SCHEMA incluindo uma chamada TABLE_STATISTICS que fornece exatamente esta informação.
Por exemplo:
ROWS_CHANGED corresponderia ao mais gravado nas tabelas e ROWS_READ seria o mais lido. Você também deve consultar INDEX_STATISTICS para encontrar seus índices mais e menos usados.
Consulte também a documentação de estatísticas do usuário do MariaDB .
Método 2
Se você não estiver usando o Percona Server, poderá usar pt-query-digest para capturar uma amostra de suas consultas e, em seguida, filtrar apenas INSERT/UPDATE/DELETEs. Isso ficaria mais ou menos assim:
Agora você tem um arquivo
/tmp/allqueries.log
que contém todas as consultas executadas em seu servidor por aproximadamente 10 minutos.Em seguida, analise-o com pt-query-digest para obter as tabelas gravadas com mais frequência:
Se você examinar
/tmp/writes.txt
, verá uma seção perto do topo que se parece com esta:Basicamente, essas são as tabelas mais gravadas durante a amostra que você escolheu. Para obter o máximo de leitura das tabelas (aproximadamente), você pode alterar o
--filter
parâmetro para--filter '$event->{arg} =~ m/^select/i'
e verá uma saída semelhante.Se você estiver interessado apenas em gravações, poderá passar um log binário
pt-query-digest
e obter resultados semelhantes:Você também pode obter os mesmos dados com tcpdump e
pt-query-digest --type=tcpdump
Então, dito isso, supondo que você esteja usando tabelas InnoDB, duvido muito que você veja muitos benefícios de desempenho ao fazer isso. Devido à maneira como os dados são armazenados em buffer no log do InnoDB e, em seguida, gravados no disco, eu não esperaria muito ou nenhum ganho de desempenho ao mover tabelas individuais dessa maneira. Você pode ver algum benefício em mover os próprios arquivos de log do InnoDB para um disco separado e mais rápido para separar as leituras/gravações do log das leituras/gravações do tablespace, mas mesmo isso é questionável. Investir em matrizes RAID rápidas e de alta qualidade com um cache alimentado por bateria (ou melhor ainda, SSD) será um melhor uso de seus recursos.