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文件

  • 相关阅读:
    笔记-归并排序
    Repeated Substring Pattern
    Assign Cookies
    Number of Boomerangs
    Paint Fence
    Path Sum III
    Valid Word Square
    Sum of Two Integers
    Find All Numbers Disappeared in an Array
    First Unique Character in a String
  • 原文地址:https://www.cnblogs.com/itfenqing/p/4429407.html
Copyright © 2011-2022 走看看