$title =

Configurando as threads concorrentes no MySQL

;

$conteúdo = [

E ai pessoal, todos bem? Espero que sim! Hoje gostaria de compartilhar a funcionalidade de mais uma option do mysql, sendo esta a innodb_thread_concurrency, então vou explicar um pouco sobre o que essa option faz e como que eu posso configura-la dentro do meu ambiente de MySQL. Espero que gostem e que essa informação ajude no dia a dia de quem trabalha com esse SGDB.

Introdução

  • O InnoDB utiliza threads do sistema operacional para processar solicitações das transações de usuário. Essas transações podem acabar emitindo muitas solicitações ao InnoDB antes de um commit ou um rollback).
  • Em situações onde é útil minimizar a troca de contexto entre threads, o InnoDB pode utilizar diversas técnicas para limitar o número de threads do sistema operacional em execução simultânea.
  • Basicamente o que essa option irá fazer no mysql será controlar quantas threads estão sendo executadas em parelelo nas CPUs, ou seja, nos processos que estiverem vindo do MySQL.
  • O default dessa option é 0, o que significa que ela não terá um limite e poderá executar imediatamente tudo que chegar na CPU de forma paralela.
  • O problema é que dependendo da carga que estiver executando, isso pode deixar a cpu em 100%, consequentemente impactando no seu ambiente.
  • Portanto, nos casos em que há alta concorrência e contenção de recursos, definir um limite específico no número de threads que podem ser executados simultaneamente pode ser benéfico.
  • Podemos administrar essa variável da seguinte forma:

Para eu visualizar o valor setado para essa option no meu ambiente

mysql> show global variables like 'innodb_thread_concurrency';
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| innodb_thread_concurrency | 0 |
+---------------------------+-------+
1 row in set (0.04 sec)
mysql>

Para configurar um valor para ela dentro do meu servidor (Nesse caso irei definir como 8)

mysql> set global innodb_thread_concurrency = 8;
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> show global variables like 'innodb_thread_concurrency';
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| innodb_thread_concurrency | 8 |
+---------------------------+-------+
1 row in set (0.00 sec)
mysql>

Uma dica legal para administrar a quantidade de processos que você tem em fila para definir  um valor ideal para essa option é utilizando o comando ‘show engine innodb status;‘ e procurando a parte de Row Operation do output para verificar as queries em fila, o relatório irá aparecer mais ou menos igual na imagem abaixo:

----------------
ROW OPERATIONS
----------------
0 queries inside InnoDB, 0 queries in queue
0 read views open inside InnoDB
Process ID=841, Main thread ID=140503651489344, state=sleeping
Number of rows inserted 0, updated 0, deleted 0, read 0
0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 0.00 reads/s
Number of system rows inserted 8, updated 331, deleted 8, read 4874
0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 0.00 reads/s
----------------------------
END OF INNODB MONITOR OUTPUT
============================

Só lembrando que o ideal é já trocar a option pelo próprio arquivo de /etc/mysql/my.cnf também.

[mysqld]
bind-address = 192.168.15.160
port = 3306
# Aumentando para 1G
innodb_buffer_pool_size= 1G
innodb_flush_method=O_DIRECT
innodb_io_capacity = 750
innodb_io_capacity_max = 1000
innodb_buffer_pool_size = 2147483648
innodb_buffer_pool_instances = 16
#innodb_thread_concurrency
innodb_thread_concurrency = 8

Após isso, basta reinicializar o mysql sudo systemctl restart mysql

Conclusão

Ao realizar ajustes na variável innodb_thread_concurrency, você vai querer considerar as familiaridades que o seu servidor possuí para realizar a melhor configuração possível, incluindo hardware e carga de trabalho, por exemplo. Todas as alterações devem ser testadas para garantir que a mudança seja efetiva e não cause problemas para o seu ambiente.

Recursos de hardware: Ao definir o valor da innodb_thread_concurrency, é necessário considerar os recursos de hardware do servidor (como o número de núcleos da CPU e a memória disponível).

Um nível mais alto de concorrência pode necessitar de um sistema com mais núcleos de CPU e memória, enquanto um nível de concorrência mais baixo pode acabar sendo mais adequado para sistemas com menores recursos.

Monitoramento e Teste: É essencial monitorar o desempenho do seu sistema depois de ajustar o valor de innodb_thread_concurrency. Realize os testes primeiro para determinar o valor ideal para o seu caso de uso específico.

Carga de trabalho: É importante considerar o tipo de carga de trabalho que seu banco de dados está manipulando. Se sua carga de trabalho envolve muitas operações de leitura e gravação com alta contenção, definir um limite específico para a option innodb_thread_concurrency poderá ajudar a prevenir a contenção de recursos e melhorar o desempenho

];

$namorado(a) =

;

$category =

;

$author =

;