zoukankan      html  css  js  c++  java
  • day8-mysql调优

    DBA

    数据库服务器    响应客户端的连接请求特别慢

    1. 硬件的配置过低——CPU、内存、硬盘
    2. 网络传输速度
    3. 客户端访问量过多,数据库服务器繁忙
    4. 软件问题——数据服务软件的版本性能不行
    5. 程序员编写的SQL语句有问题

     

    硬调优

    软调优——服务运行时的运行参数

     

    1、客户端连接数据库服务器?

    2、数据库服务器响应客户端的连接请求?

    3、连接成功后,执行sql操作(查看 select、写)

    4、若执行的是查询操作,先在查询缓存里找数据,找到后直接返回给客户端,若查询缓存里没有,到表对应的文件里去查找——默认会把本次的查询结果保存到查询缓存里,然后在把查询结果返回给客户端

     

    mysql调优

    设置数据库服务器运行时的运行参数

    查看最多连接并发数——取决于硬件

    mysql> show variables like "max_connections";

    查看已连接并发数

    mysql> show global status like "max_used_connections";

    重新统计数据

    mysql>flush status;

    1、设置数据库服务器的并发连接数

    临时设置

    mysql>set GLOBAL max_connections =值

    永久设置

    将max_connectinos=值写到my.cnf文件里[mysqld]下面

     

    max_used_connectinos    / max_connectinos=值 * 100%=85%(理想值85%)

    max_used_connectinos    / max_connectinos=0.85 * 100%=85%

     

    2、客户端连接超时时间的设置

    mysql>sql命令

    连接超时时间

    connect_timeout=值    单位为秒

    连接后,等待发送指令的超时时间

    wait_timeout=值    单位为秒

    默认这两项一般不修改

     

    3、缓存空间的设置

    索引缓存空间    默认为8M    单位为字节

    mysql> show variables like "key_buffer_size"

    mysql> show global status like 'key_read%';

    Key_read_requests     索引读取请求总数、

    Key_reads 内存中没有找到直接从硬盘读取索引数据

     

    查询缓存空间

    每个需要进行排序的线程分配该大小的缓冲区(增加此值加速order by或group by)——当分组和排序较多可把下面调大

    mysql> show variables like "sort_buffer_size%";

    从数据表顺序读取数据的读操作保留的缓存区的长度

    mysql> show variables like "read_buffer_size%";

    按某种特定顺序(如何使用了ORDER BY子句的查询)输出的查询结果

    mysql> show variables like "read_rnd_buffer_size%";

    可以重复使用的保存在缓存中线程的数量——默认值为0

    mysql> show variables like "thread_cache_size";

    查看进程使用情况

    mysql> show global status like 'thread%';

    Threads_cached     Threads_cached_size

    Threads_connected    已有的链接

    Threads_created    创建过的线程数

    Threads_running    正在运作着的链接

    所有线程打开表的数量

    mysql> show variables like "table%_cache%";

    mysql> show global status like "open%table%";

    Open_table_definitions     

    Open_tables         打开表的数量

    Opened_table_definitions     

    Opened_tables        打开过的表数量

     

    Open_tables / table_cache * 100% =100%(理想值<=95%)

     

    4种类型日志

    binlog日志——记录发生改变的SQL语句

    慢查询日志——记录超出指定时间显示查询结果的SQL语句

    查询日志——记录客户端连接自己后执行的所有SQL语句

            general-log

            general-log-file=路径

    错误日志——记录数据库服务在启动和运行过程中产生的错误——默认开启——文件名/var/lib/mysql/主机名.err——在配置文件log-error=路径

     

    启用mysql数据库服务器的慢查询日志

    slow-query-log

    slow-query-log-file=路径

    long-query-time=超时时间(单位秒)——当查询时间超过X秒,才会被记录

    log-queries-not-using-indexes    记录未使用索引的查询

     

    开启日志后重启mysql服务

    查看慢查询日志文件记录的内容

    使用mysqldumpslow    慢查询日志文件名

     

    显示当前数据库服务器关于查询缓存参数的设置

    mysql> show variables like "query_cache%";

    query_cache_limit    查询结果超过里面的值,就不保存到查询缓存

    query_cache_min_res_unit    缓存块的大小(相当于磁盘的4K)

    query_cache_size    查询缓存的大小

    query_cache_type    缓存类型(0对应OFF,关闭查询结果放入缓存;1对应ON,开启查询结果放入缓存;2,开启查询结果放入缓存,但查询时需加关键字)

    query_cache_wlock_invalidate    当有其他客户端下在对myisam表进行写操作时,如果查询在query cache 中,是否返回cache结果还是等写操作完成再读表获取结果

     

    查询缓存变量的值

    mysql> show global status like "qcache%";

    Qcache_free_blocks    空闲块的块数(值多了,有碎片)

    Qcache_free_memory     缓存中的空闲内存

    Qcache_hits    记录查询缓存的次数(每次失去一切都缓存中命中时就自加1)

    Qcache_inserts        记录查询总的次数(每次插入一个查询时就自加1,命中次数除以插入次数就是不中比率)

    Qcache_lowmem_prunes    当查询缓存空间不足时,记录删除的次数(缓存出现内存不足时,并且必须要进程清理以便为更多查询提供空间的次数)

    Qcache_not_cached     记录查询结果超过多大就不允许放入缓存空间的次数(不适合进行缓存的查询数量)

    Qcache_queries_in_cache     当前缓存的查询(和响应)的数量

    Qcache_total_blocks    缓存中块的数量

  • 相关阅读:
    linux下面发布80端口的服务
    visio 安装
    SSH进行登录远程主机,实验室网站,项目
    论文遇到的问题
    ubuntu设置目录容量大小
    ubuntu 磁盘分区
    SpringBoot打成的jar包发布,shell关闭之后一直在服务器运行
    docker的安装,使用
    多线程下载文件,ftp文件服务器
    抖音红人,
  • 原文地址:https://www.cnblogs.com/fina/p/5859611.html
Copyright © 2011-2022 走看看