MYSQL otimização de parâmetros de configuração comum

prefácio

  otimização MySQL é a parte mais difícil, não só precisa entender o conhecimento profissional MySQL, mas também precisa de observação a longo prazo e julgamento estatístico baseado na experiência, e, em seguida, definir parâmetros razoáveis. Vamos olhar alguma otimização básica MySQL.

parâmetros MySQL otimizados para diferentes sites e de volume on-line, número de visitas, número de mensagens, condições de rede e configurações de hardware da máquina ter um relacionamento, uma otimização one-time não pode ser concluída, exige observação e testes constantes, será possível para obter o melhor efeito.

1) de pedido de ligação variável

1, max_connections

  MySQL o número máximo de conexões , o pedido de ligação para o servidor se uma quantidade grande concorrente, recomenda-se aumentar este valor para aumentar o número de conexões paralelas, é claro, só pode ser estabelecida quando a máquina é suportado, porque, se mais conexões, cada sabor MySQL conexão fornece o buffer de ligação, que vai custar mais de memória, de modo a ajustar o valor, não cegamente aumentar o valor definido.

    Too mant erro connetcions: O valor é muito pequeno, muitas vezes ERRO 1040 vai ser por mysql> show status como 'conexões' ; wildcards para ver o número de conexões estado atual (tentando se conectar ao MySQL (número de conexões, independentemente da ligação for bem sucedida)) para o tamanho do valor fixado.
    Variáveis como Mostrar ' max_connections ': o número máximo de ligações
    Mostra variáveis como' max_used_connection ': um número correspondente de ligações
    (max_used_connection / max_connections) * 100% ( igual a cerca de 85% em relação ao valor)
    se Max_used_connections e max_connections mesmos, em seguida, o valor é demasiado baixo, ou max_connections um servidor de carga excede o limite superior, é definida a menos de 10% é muito grande.

2, back_log

  O número de conexões MySQL podem ser temporariamente armazenados , o padrão é 50. Quando o thread principal do MySQL é obter muitas solicitações de conexão em um curto período de tempo, ele vai desempenhar um papel. Se os max_connections dados conexão alcances MySQL, o novo pedido estará presente na pilha, e espera por uma conexão com a liberação de recursos, ou seja, o número da pilha O back_log, se o número exceder o back_log para conexões, recursos de conexão não serão aceitos.

3, wait_timeout 和 interative_timeout

  wait_timeout = 120: Depois de completada a operação mysql ligação aplicação, 120 segundos após a desconexão ocioso
  interative_timeout = 120: o cliente refere-se a operação de conexão mysql mysql está concluída, o ocioso 120 segundos OFF

  Efeitos sobre as propriedades
  do wait_timeout
        (. 1), se estiver definido muito pequeno, então a conexão é fechada rapidamente, para que alguma conexão permanente não funciona
        (2) Se a conexão muito facilmente liderança aberta por muito tempo, quando SHOW PROCESSLIST, pode ser ver a conexão muito estado de sono, resultando em muitos erro conexões.
        (3) É wait_timeuot geralmente desejável um preço tão baixo quanto possível
        configuração interative_timeout não terá muito impacto na sua aplicação web

2) variável tampão

tampão global

4, key_buffer_size

  key_buffer_size tamanho do buffer de índice especificado, ele decidiu lidar com a velocidade do índice, especialmente uma velocidade de leitura de índice.

  key_read_requests valor e key_reads verificando o status, você pode saber set key_buffer_size é razoável.

  Key_reads Proporção / key_read_requests deve ser tão baixo quanto possível, é de pelo menos 1: 100, 1: 1000 melhor (utilizando o valor de estado acima descrito pode mostrar o estado como 'KEY_READ%' obtido)

    A probabilidade de erros de cache:
    key_cache_miss_rate = key_reads / Key_read_requests * 100%
    key_buffer_size somente tabelas Maisam.

    Key_buffer_size como ajustar o valor
    do número de configuração padrão 8388608 (8M), o anfitrião tem 4G de memória pode valorizar melodia 268435456 (256M)

5, query_cache_size (cache de consultas referido QC)

    Usar o cache de consulta, os resultados da consulta MySQL armazenados no buffer, no futuro, irá ler os resultados da mesma instrução SELECT (case-sensitive) diretamente do buffer.
    Se você começar com um SQL consulta SELECT, em seguida, servidor MySQL tentará usar seu cache de consultas.

    Nota: As duas instruções SQL, mesmo que seja apenas uma diferença de um personagem (por exemplo, o caso é diferente: mais do que um espaço, etc.), então os dois vão usar um cache de SQL diferente

    Por status show como 'Qcache%' você pode saber configurações query_cache_size são razoáveis

    Qcache_free_blocks: o número de cache do bloco de memória adjacente. Se o valor apresentado é muito grande, então o cache de consultas é uma fragmentação de memória mais.
    Nota: Quando uma tabela é atualizada, o bloco de cache associado e ele estará livre. Mas o bloco ainda podem existir na fila, a menos que seja na cauda da fila. Você pode liberar consulta declaração cache para limpar os blocos livres.

    Qcache_free_memory: Query Cache restante no tamanho da memória actual. Por esse parâmetro, podemos fornecer um tamanho mais preciso observação memória Cache de Consultas, o sistema atual é adequada, ou muito de um aumento é necessário.

    Qcache_hits: indica quantas vezes um cache hit. Nós podemos verificar a consulta principal pode ser armazenado em cache pelo efeito dos nossos valores. Quanto maior for o número o efeito tampão mais ideal.

    Qcache_inserts: indica quantas vezes Misses inserção, o que significa novo para solicitação de SQL não foi encontrado no cache e teve de realizar consulta processamento, consulta processamento dos resultados após a execução com cache de consulta de inserção. Quanto mais o número de tais casos, a aplicação para indicar consulta cache é relativamente pequeno, o efeito não é o ideal.

    Qcache_lowmen_prunes:多少条Query因为内存不足而被清除出Query Cache,通过Qcache_lowmem_prunes和Qcache_free_memory 相互结合,能够更清楚的了解到我们系统中Query Cache的内存大小是否真的足够,是否非常频繁的出现因为内存不足而有Query被换出。这个数字最好是长时间来看,如果这个数字在不断增长,就表示可能碎片化非常严重,或者内存很少。

    Qcache_queries_in_cache:当前Query Cache 中cache的Query数量
    Qcache_total_blocks:当前Query Cache中block的数量

    Query Cache的限制
    a)所有子查询中的外部查询SQL 不能被Cache:
    b)在p'rocedure,function以及trigger中的Query不能被Cache
    c)包含其他很多每次执行可能得到不一样的结果的函数的Query不能被Cache

6、max_connect_errors:

  是一个MySQL中与安全有关的计数器值,他负责阻止过多尝试失败的客户端以防止暴力破解密码的情况,当超过指定次数,MySQL服务器将禁止host的连接请求,直到mysql服务器重启或通过flush hotos命令清空此host的相关信息。(与性能并无太大的关系)

7、sort_buffer_size:

每个需要排序的线程分配该大小的一个缓冲区。增加这值加速ORDER BY 或 GROUP BY操作
    sort_buffer_size是一个connection级的参数,在每个connection(session)第一次需要使用这个buffer的时候,一次性分配设置的内存。
    sort_buffer_size:并不是越大越好,由于是connection级的参数,过大的设置+高并发可能会耗尽系统的内存资源。例如:500个连接将会消耗500*sort_buffer_size(2M)=1G

8、max_allowed_packet=32M

    根据配置文件限制server接受的数据包大小。

9、join_buffer_size=2M

    用于表示关联缓存的大小,和sort_buffer_size一样,该参数对应的分配内存也是每个连接独享。

10、thread_cache_size=300

  服务器线程缓存,这个值表示可以重新利用保存在缓存中的线程数量,当断开连接时,那么客户端的线程将被放到缓存中以响应下一个客户而不是销毁(前提时缓存数未达上限)。

  1)如果线程重新被请求,那么请求将从缓存中读取;

  2)如果缓存中是空的或者是新的请求,这个线程将被重新请求,那么这个线程将被重新创建;

  3)如果有很多新的线程,增加这个值可以改善系统性能,通过比较Connections和Threads_created状态的变量,可以看到这个变量的作用。

  设置规则如下:1G内存配置为8,2G内存为16.  服务器处理此客户的线程将会缓存起来以响应下一个客户而不是被销毁(前提是缓存数未到达上限)

  Threads_cached:代表当前此时此刻线程缓存中有多少空闲线程。
  Threads_connected:代表当前已建立连接的数量,因为一个连接就需要一个线程,所以也可以看成当前被使用的线程数。
  Threads_created:代表最近一次服务启动,已创建线程的数量,如果发现Threads_created值过大的话,说明MySQL服务器一直在创建线程,这也比较消耗资源,可以适当增加配置文件中thread_cache_size值
  Threads_running:代表当前激活的(非睡眠状态)线程数。并不是代表正在使用的线程数,有时候连接已建立,但是连接处于sleep状态。

3)配置Innodb的几个变量

11、innodb_buffer_pool_size

  对于innodb表来说,innodb_buffer_pool_size的作用相当于key_buffer_size对于MyISAM表的作用一样。Innodb使用该参数指定大小的内存来缓冲数据和索引。最大可以把该值设置成物理内存的80%。

12、innodb_flush_log_at_trx_commit

    主要控制了innodb将log buffer中的数据写入日志文件并flush磁盘的时间点,取值分别为0,1,2.

    实际测试发现,该值对插入数据的速度影响非常大,设置为2时插入10000条记录只需要两秒,设置为0时只需要一秒,设置为1时,则需要229秒。因此,MySQL手册也建议尽量将插入操作合并成一个事务,这样可以大幅度提高速度。

13、innodb_thread_concurrency=0

    此参数用来设置innodb线程的并发数,默认值为0表示不被限制,若要设置则与服务器的CPU核心数相同或是CPU的核心数的2倍。

14、innodb_log_buffer_size

    此参数确定日志文件所用的内存大小,以M为单位。缓冲区更大能提高性能,对于较大的事务,可以增大缓存大小。

15、innodb_log_file_size=50M

    此参数确定数据日志文件的大小,以M为单位,更大的设置可以提高性能。

16、innodb_log_files_in_group=3

    为提高性能,MySQL可以以循环方式将日志文件写到多个文件。推荐设置为3

17、read_buffer_size=1M

    MySQL 读入缓冲区大小。对表进行顺序扫描的请求将分配到一个读入缓冲区MySQL会为他分配一段内存缓冲区

18、read_rnd_buffer_size=16M

    MySQL 的随机读(查询操作)缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配到一个随机都缓冲区。进行排序查询时,MySQL会首先扫描一遍该缓冲区,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但是MySQL会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存消耗过大。
    注:顺序读是根据索引的叶节点数据就能顺序的读取所需要的行数据。随机读是指一般需要根据辅助索引叶节点中的主键寻找侍其巷进行数据,而辅助索引和主键所在的数据端不同,因此访问方式是随机的。

19、bulk_insert_buffer_size=64M

    批量插入数据缓存大小,可以有效的提高插入效率,默认为8M

20、binary log

    binlog_cache_size=2M   //为每个session分配的内存,在事务过程中用来存储二进制日志的缓存,提高记录bin-log的效率。

    max_binlog_cache_size=8M //表示的是binlog能够使用的最大cache内存大小

    max_binlog_size=512M  //指定binlog日志文件的大小。不能将变量设置为大于1G或小于4096字节。默认值为1G.在导入大容量的sql文件时,建议关闭,sql_log_bin,否则硬盘扛不住,而且建议定期做删除。

    expire_logs_days=7  //定义了mysql清除过期日志的时间

    参数汇总:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
server_id = 1
socket = /usr/local/mysql/mysql.sock
log-error = /usr/local/mysql/data/mysqld.err
slow_query_log = 1
slow_query_log_file=/usr/local/mysql/data/slow-query.log
long_query_time = 1
log-queries-not-using-indexes
max_connections = 1024
back_log = 128
wait_timeout = 60
interactive_timeout = 7200
key_buffer_size = 256M
query_cache_size = 256M
query_cache_type = 1
query_cache_limit = 50M
max_connect_errors = 20
sort_buffer_size = 2M
max_allowed_packet = 32M
join_buffer_size = 2M
thread_cache_size = 200
innodb_buffer_pool_size = 2048M
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 32M
innodb_log_file_size = 128M
innodb_log_files_in_group = 3
log-bin=/usr/local/mysql/data/mysqlbin
binlog_cache_size = 2M
max_binlog_cache_size = 8M
max_binlog_size = 512M
expire_logs_days = 7
read_buffer_size = 1M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 64M
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
 
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
 
# These are commonly set, remove the # and set as required.
# basedir = .....
# datadir = .....
# port = .....
# server_id = .....
# socket = .....
 
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
 
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

Acho que você gosta

Origin www.cnblogs.com/FondWang/p/12582844.html
Recomendado
Clasificación