zoukankan      html  css  js  c++  java
  • mysql数据库 调优

    mysql调优
    硬件配置
    网络带宽
    mysql运行参数
    慢查询日志
    网络架构
    多实例(一台服务器上运行多个数据库服务)
    分库
    分表


    当一台数据库服务器处理客户端的请求慢时,
    可能是哪些原因造成?

    硬件配置低:(内存 cpu 硬盘i/o )
    查看硬件使用情况
    free -m
    top


    网络带宽:
    测试带宽(扩展带宽)


    提供数据库服务软件的版本太低:
    vim /etc/my.cnf
    [mysqld]
    选项-值(不选就是默认的)
    /etc/init.d/mysql restart
    数据库服务器处理查询请求的过程:连接池》sql接口》分析器》优化》存储引擎》文件系统》管理工具
    接收到查询请求时,现在查询缓存里查找记录,如果有,直接回给客户端,
    如果没有,到表里去找,找到后先将结果存储到查询缓存里,再回数据给客户端。

    查看服务运行的参数值
    mysql> show variables like "%关键字%";(查看)
    mysql> set global 变量名=值;(修改)

    并发连接数
    mysql> show variables like "%connect%";(查看链接)
    max_connections=151(默认151)
    mysql> set global max_connections=200;(改为200)
    mysql> show global status like "%connect%"; max_used_connections;(查看最大连接次数)
    并发量最优公式:max_used_connections/max_connections = 0.85*100%=85%

    链接超时时间
    mysql> show variables like "%timeout%";(查看超时时间)
    建立连接时的超时时间connect_timeout=10 默认10秒
    建立连接后,等待sql命令的超时时间wait_timeout=28800 默认28800秒

    查询缓存大小
    mysql> show variables like "%cache%";(查看查询)
    mysql> show variables like "%query_cache%";(查看查询大小)
    query_cache_size=1048576 大于1048576这个数,不让存进去

    查看查询缓存的统计信息
    mysql> show global status like "%qcache%";
    Qcache_hits(在查询缓存找一次+1)
    Qcache_inserts(查询总数)

    可重复使用的线程数量
    可以保存在内存里,可以重复使用的线程的数量
    mysql> show variables like "%thread%";
    thread_cache_size=9 默认9个

    所有线程打开表的总数
    mysql> mysql> show variables like "%table%";
    table_open_cache=2000 默认2000
    key-buffer-size:用于myisam引擎的关键索引缓存大小
    sort-buffer-size:为每个要排序的线程分配此大小的缓存空间
    read-buffer-size:为顺序读取表记录保留的缓存大小
    thread-cache-size: 允许保存在缓存中被重用的线程数量


    程序猿编写提取数据的sql命令太复杂:
    查看记录
    单表 多表 嵌套 连接
    解决:启用慢查询日志,记录客户端连接后
    超过指定时间显示查询结果的sql命令
    mysql服务的日志类型:
    错误日志:默认启用,记录的服务在启动和运行过程中的错误信息
    binlg日志:默认没有启用,记录客户端连接服务器后,执行的除查询之外的sql命令
    慢查询日志:默认没有启用,记录客户端连接后,超过指定时间显示查询结果的sql命令
    查询日志:默认没有启用,记录客户端链接后,执行的所有sql命令

    慢查询日志的使用:
    vim /etc/my.cnf
    slow-query-log(日志存储位置,默认在数据库目录下,主机名-slow.log)
    long-query-time=5(超时时间,默认10秒)
    /etc/init.d/mysql restart(重启服务)
    [root@158 mysql]# mysqldumpslow /var/lib/mysql/158-slow.log > /opt/sql.txt(把超时的查询语句重定向到文件里)

    查询日志的使用:
    vim /etc/my.cnf
    general-log(日志存储位置,默认在数据库目录下,主机名.log)
    [root@158 mysql]# cat 158.log


    网络架构有问题:
    重新规划网络

    ——————————————————————————————————————————————————————————————————————————————————————————

  • 相关阅读:
    VS与ultraedit 正则表达式替换
    Java学习第十七天
    Java学习第十六天
    Java学习第十五天
    Java学习第十四天
    Java学习第十三天
    Java学习第十二天
    Java学习第十一天
    Java学习第十天
    Java学习第九天
  • 原文地址:https://www.cnblogs.com/Hydraxx/p/7504410.html
Copyright © 2011-2022 走看看