mysql调优

clint---> httpd---> php --->mysql

解压缩: tar fzxv mysqlreport-3.5.tgz (汇报工具,通过这个工具可以观察到一些数据)
    cd mysqlreport-3.5
    cp mysqlreport /usr/bin
    mysqlreport  --user root --password 123 (有用户名和密码的前提下)
    #yum serach  DBI -y
    #yum install perl-DBD-MySQL -y
           mysqlreport --outfile /tmp/mysql 写入到文件中
    vim /tmp/mysql
Myisam引擎
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    Key---->Mysam引擎的索引
    Read hit ---->命中率(越高代表着效率很高)
    调整key_buffer 
    方法1:
    show variables like '%key%';
    set global key_buffer_size=16777216;
    方法2:必须要重新启动服务
    vim /etc/my.cnf
    key_buffer_size=16777216
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    Qusetion
        Total 分类
        DMS        由增、删、改、查、替换

        Slow 10 s  当你的工作在10S内没有完成,即作慢查询
        vim /etc/my.cnf
        log-slow-queries=/tmp/slow.log 慢速日志存放的位置
         long-query-time=20          超出多长时间算作慢速查询
        注:如果没有必要去定位slow,就不需要开启,因为开启会增加IO

        Qc Hits    查询缓存 
        调整Query Cache
        show variables like '%query%';
        set global query_cache_size=8384512;
        mysqlreport
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    SELECT and Sort 
          Sort 用来作排序的内存多大,他对应的是每一个线程
        mysql是以线程方式工作的,这个数值设置大了,可以增加排序的效率
        show variables like '%sort%';
        set global sort_buffer_size='2097144';
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    Table locks
        Waited  这个数值越小越好
        show full processlist;
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    Tables    增快表访问的速度
        open     当前打开了多少表
        opend     一共打开了多少表
        show variables like '%table%';
        table_cache
        set global table_cache=128; 把表的文件描述符写入到内存中了
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    Connections
        Max used  最大连接数
        show variables like '%max%';
        set global max_connections=100;
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    Created Temp    创建临时表(排序、索引)
        show variables like '%tmp%';
        tmpdir    /tmp/  临时表创建的位置
        tmp_table_size 如果创建临时表的大小超过32M将会把数据写入到磁盘中
        Disk table 值变大的时候
        解决方法:1、增大临时表的大小 2、优化查询语句
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    Threads    线程缓存,减少从需要到产生的时间
        show variables like '%thread%';
        thread_cache_size
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    Bytes    和网络相关的
        Sent        发送的流量
        Recevied    接收的流量
        单位是:B

InnoDB引擎  
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    InnoDB Buffer Pool 
    Usage    越大越好
    show variables like '%innodb%';
    set global innodb_buffer_pool_size=8388608;
    注:建议大小设置为整个内存的80%
    Pages    单位:16K
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
InnoDB与网络
    back_log 请求队列中能够排队的大小,如果增大并发数,则这个数必须要调大
    tcp.max_syn_backlog
    somaxconn

    一次消息传输量的最大值
    show variables like '%max_allowed_packet%';
    default 1M

    show variables like '%timeout%';
    connect_timeout     连线时的超时时间

    interactive_timeout 处于回会话空闲的timeout,连接上来什么都不执行的超时时间
    wait_timeout 

    net_read_timeout
    net_write_timeout  处于数据交互阶段超时时间 
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Innodb与IO相关的
    show variables like '%innodb_flush_log%';
    innodb_flush_log_at_trx_commit
    0 最不安全,但是效率是最高,每隔一秒钟会把数据写入到硬盘上,如果断电或者数据库服务坏了,数据就丢失了
    1 最安全,数据会时时的写到硬盘上
    2 先写到操作系统的内存中,再写入到磁盘中,mysql进程死了,数据不丢,但是断电了,数据就丢失了

    绕过操作系统的缓存,直接将数据写入到磁盘中,好处是节省了内存
    vim /etc/my.cnf
    innodb_flush_medthod=O_DIRECT
    /etc/init.d/mysqld restart
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
InnoDB与cpu
    主频高
    核心
    taskset 绑定



select table_schema as 'DBname', sum(data_length + index_length) / 1024/ 1024  as 'DB size(MB)', sum(data_free) 
/1024/1024  as 'free space (MB)' from information_schema.tables group by table_schema;


mysql  vm 
ey_buffer  (myisam)
query_cache_size 
sort_buffer_size
table_cache
tmp_table_size
thread_cache_size
innodb_buffer_pool_size (innodb)


mysql net

back_log
max_connections
/proc/sys/net/core/somaxconn
/proc/sys/net/ipv4/tcp_max_syn_backlog

connect_timeout     连线时的超时时间

interactive_timeout 处于回会话空闲的timeout,连接上来什么都不执行的超时时间
wait_timeout 

net_read_timeout
net_write_timeout  处于数据交互阶段超时时间 

max_allowed_packet  (1M)



mysql io
innodb_flush_log_at_trx_commit
    0 最不安全,但是效率是最高,每隔一秒钟会把数据写入到硬盘上,如果断电或者数据库服务坏了,数据就丢失了
    1 最安全,数据会时时的写到硬盘上
    2 先写到操作系统的内存中,再写入到磁盘中,mysql进程死了,数据不丢,但是断电了,数据就丢失了


innodb_flush_medthod=O_DIRECT



mysql cpu

results matching ""

    No results matching ""