zoukankan      html  css  js  c++  java
  • MySQL优化常用


    一.mysql的配置都是小写的,使用下划线_或破折号-分割单词,两者是一样的

    二.在配置文件中可以用1m,1g等单位,但是用set命令,不能使用单位,默认单位是字节

    三.特殊例子
    a.query_cache_size变量是全局性的
    b.sort_buffer_size变量有全局性默认值,但是可以在回话中改变
    c.join_buffer_size有全局性的默认值,可以在会话中设置,但是联接了几个表的查询可能会每个联接都分配一个联接缓冲区,所以每个查询都可能有几个联接缓冲区

    四.注意事项
    a.key_buffer_size
    设置这个变量给键缓存区分配指定大小的空间.但是操作系统只是在实际用到的这些空间的时候才会分配.可以创建多个键缓存.

    b.table_cache_size
    设置这个变量,不会立即生效,要等到下个线程打开表的时候才会生效.当它生效的时候,mysql会检查变量的值.如果设置的值大于缓存表的数量,线程就把表插入到缓存,否则,就从缓存中删除不用的表,再插入.

    c.thread_cache_size(线程缓存的数量)
    这个设置不会立即生效,生效到线程关闭的时候.如果有空间存储线程,就缓存.如果不是,直接结束掉线程

    d.query_cache_size
    在服务启动的时候,mysql会一次性分配所定义的变量内存.如果更新了变量,mysql会删除掉当前缓存的.即便值设置为当前值.

    e.read_buffer_size
    当查询不断的扫描一个表,mysql会分配一个缓存区.这个缓存区就是read_buffer_size所定义的大小.mysql只有在查询用到的时候,才会分配,而且是一次性分配该变量指定的大小.

    f.read_rnd_buffer_size(该变量更精确的名字应该是max_read_rnd_buffer_size)
    加速排序操作后的读数据,提高读分类行的速度。如果正对远远大于可用内存的表执行GROUP BY或ORDER BY操作,应增加read_rnd_buffer_size的值.
    需要用到时才会分配,并且只分配需要大小的内存.

    g.sort_buffer_size(每个线程排序所需要的缓存)
    只要发生排序,就会分配,并一次性分配指定大小.不管是否需要这么多

    五.myisam调优
    1.mysql安装后,会有my-huge.cnf,my-larege.cnf等配置文件,这些配置文件通常适用于myisam
    2.key_buffer_size,应该占到保留内存的25%到50%,对于mysql5.0,该变量最大上限是4GB
    3.可以创建多个缓存区,这样就可以一次在内存中保存超过4GB以上的索引,为了创建名为key_buffer_1和key_buffer_2,大小都为1GB的缓存区,可以在配置文件中加入
    key_buffer_1.key_buffer_size = 1G
    key_buffer_2.key_buffer_size = 1G
    可以使用CREATE INDEX命令把表映射到缓存
    通过下面命令把表t1和t2的索引保存到key_buffer_1上
    mysql>CREATE INDEX t1,t2 IN key_buffer_1;

    还可以使用LOAD INDEX预加载表索引到缓存中:
    mysql>LOAD INDEX INTO CACHE t1,t2;

    4.缓存命中率
    100 - ( (Key_reads * 100) / Key_read_requests )

    下面的命令以10s幅度递增,计算了总的未命中次数
    #mysqladmin extended-status -r -i 10 | grep Key_reads

    5.没有必要让key_buffer_size大于索引数据大小
    #du -sch `find /path/to/mysql/data/directory -name "*.MYI"
    通过以上命令,找出存储索引文件的大小

    6.myisam数据块大小
    myisam_block_size该值确定了该项大小,这与系统页面大小相关.x86架构中,系统页面大小为4k,该值与系统页面大小相同可避免写入等待

    六.InnoDB调优
    1.InnoDB严重依赖于缓冲池.可以将80%的物理内存分配给它.
    innodb_buffer_pool_size确定该大小

    2.innodb_max_dirty_pages_pct该值确定了保留在缓存池中被修改的页面的数量.但达到90%的时候,开始数据冲刷到磁盘.该值设置的小,可以更好的吸收写入尖峰.

    3.如果使用innodb_file_per_table选项,那么对innodb任何时候打开的.ibd文件还有另外一个限制.它受innodb_open_files的控制.如果可以的话,尽量将innodb_open_files设置的足够大.这样服务器就可以同时保留所有打开的.idb文件

  • 相关阅读:
    php----爬虫(爬取豆瓣演员信息,搜索页)遇到的问题
    python-写爬虫时遇到的问题 TimeoutError: [WinError 10060]
    聚沙成塔
    买手机,继续纠结中
    问题不绕弯,死磕
    死磕,死磕死磕
    学而不践则罔
    越是忙的时候,兴趣越多
    周末小总结
    幸福和需求
  • 原文地址:https://www.cnblogs.com/itfenqing/p/4429407.html
Copyright © 2011-2022 走看看