概述

1. 配置相关:硬件、数据大小、query类型、系统需求(响应时间、事务、一致性等等

2. 需要个性化配置:默认配置只是使server运行,考虑通用性、其他运行程序、不占用太多资源

3. 调整一个参数不可能获得较大性能提升,需要为一堆参数设置合理值,慢慢提升

4. 内存使用、IO、disc存储;基于负载的调试;需要特殊定制的query

配置基础

1. 两种设置方法:my.cnf 命令行()

确定一直使用的参数放在cnf里,否则下次执行可能丢失

2. 查看mysql使用哪个配置

$ which mysqld

/usr/sbin/mysqld

$ /usr/sbin/mysqld --verbose --help | grep -A 1 'Default options'

Default options are read from the following files in the given order:

/etc/mysql/my.cnf ~/.my.cnf /usr/etc/my.cnf

3. 配置有不同的使用范围:server、connnection(session)、object;connection有对应的global的,会覆盖,仅影响该conn

query_cache_size:global

sort_buffer_size:global defaul;per-session也可以单独设置

join_buffer_size:global defaul;per-session也可以单独设置;一个含有多个join的query可以有多个join buffer

4. 动态参数在server运行时可以修改 但是重启失效,下面是使用不同方法修改session和global的sort_buffer_size

SET           sort_buffer_size  = ;

SET GLOBAL    sort_buffer_size  = ;

SET         @@sort_buffer_size := ;

SET @@session.sort_buffer_size := ;

SET  @@global.sort_buffer_size := ;

小心使用,做很多工作:比如将buffer中的dirty data flush

一下几个变量动态修改很关键:

key_buffer_size:

table_cache_size:修改的时候没影响,当其他线程open table时,检查现在cache中的table数量与这个变量比较

thread_cache_size:缓存线程

query_cache_size:删除所有cached的query,重新设定cache大小 初始化

read_buffer_size

read_rnd_buffer_size

sort_buffer_size

5. 不是越大越好

做一个banchmark suit

每次改动一两个参数

有可能影响操作系统:sort_buffer_size与cpu cache;read_buffer_size与server的read-ahead和系统的IO

也有可能相互关联:innodb_log_file_size的最佳设置取决于innodb_buffer_pool_size

General Tuning

1. 起点:my-huge.cnf, my-large.cnf, and my-small.cnf

仅适用于只使用MyISAM

2. Menory Usage

这个是必须定制的

两种:一种不可控制(run server/parse query) 一种可以控制

如下方法定制

确定内存使用的上线

确定每个连接使用的内存,比如sort buffer、临时表

确定OS需要多少内存能保证运行正常,包括运行其他程序

假定上述合理的话,将其他的内存用于mysql的caches,比如InnoDB的buffer pool

mysql能用多少内存

上限难以界定,出发点事全部物理内存

32位linux内核限定 任何单个进程使用内存在2.5-2.7G

64位也有类似限定,很多buffer限定在4G之内

每个连接的内存需求:估算峰值期间内存需要

为OS预留内存:最佳情况是不要swap memory to disc,一般不大于1G/2G

最重要的cache

OS cache for MyISAM data;

MyISAM key Cache;

InnoDB buffer pool;

query Cache

其他的cache通常不会使用太多内存

使用单一的engine便于调试

3. MyISAM key cache

也叫key buffer,默认只有一个,但是可以建立多个

仅cache index,不cache data(让OS cache data)

最重要的是key_buffer_size,需要分配25-50%的cache内存

默认缓存所有的index在一个buffer内,但是可以建多个,这样就可以有大于4G的index在内存

监视性能和key buffer的使用:SHOW STATUS and SHOW VARIABLES

Cache hit ratio

100 - ( (Key_reads * 100) / Key_read_requests )

Percentage of buffer in use

100 - ( (Key_blocks_unused * key_cache_block_size) * 100 / key_buffer_size )

经验上,每秒的cache misses也很重要,假定硬盘每秒可以100随机读,5个miss没影响,但是80miss会使IO成为瓶颈

Key_reads / Uptime

计算10秒的增量:$ mysqladmin extended-status -r -i 10 | grep Key_reads

当决定key buffer大小时,可以查看index在硬盘的大小,buffer不需要比这个大

$ du -sch `find /path/to/mysql/data/directory/ -name "*.MYI"`

myisam_block_size:5.1以后,设定key block size

read-around write: cache读1K,OS读4K用完discard,cache修改,os还要再读在写回

4. InnoDB buffer pool

缓存index和data,insert buffer、lock等

延迟写操作,合并后统一写

严重依赖buffer pool,在一个专用server上,需要将80%的内存分配给他

可以使用show和innotop等工具监视内存使用和性能

InnoDB是没有LOAD INDEX INTO CACHE这样的功能的

在很少境况下,大buffer(如50G)有问题:ckpt/insertMerge slow、

innodb_max_dirty_pages_pct:限制在buffer中的dirty数据,默认90%,达到就flush

Innodb_buffer_pool_pages_dirty:现有的dirty page

5. Thread cache

hold线程,目前没和任何conn绑定,但ready to serve conn

thread_cache_size:cache中的thread数量,除非有大量conn一般不需要修改

查看Threads_created,确保thread cache足够大:没秒少于10个可以认为合理,但通常都可以达到1以下

比较好的方法是查看Threads_connected,然后将thread_cache_size设置为波动大小:

100-200,设置为100;500-700,设置为200

设置很大没什么用,设置很小也不会节约内存,每个thread大概占256k,与query相比很小

将这个值设的足够大,让create操作不频繁就行

6. table cache

包含.frm和其他信息,具体与engine有关(Myisam data/index file描述符;mergeTable file描述符s  描述符:可以不用open file)

设计偏重Myisam,是唯一个server与engine没有彻底分离的部分

innodb对他的file描述符不怎么使用,会使用解析的.frm

5.1开始分为两部分table和talbe definition:table_open_cache and table_definition_cache

Opened table每个线程每个表有一份,但definition是global的

如果Opened_tables很大或在增长,说明参数设小了(table_cache, 5.1:table_open_cache)

过大的缺点是:如果含有很多Myisam 关server会很慢

如果发现 Mysql不能打开更多的file错误:修改open_files_limit in your my.cnf

7. Innodb 数据字典

innodb每个表都有一个cache,叫table definition cache或数据字典,每个表大概4K,当他们closed时从数据字典移开

主要性能问题是:打开和计算统计信息,需要IO

innoDB在启动时建统计信息,并不持久保存,每张表都会顺序做这个工作,会导致启动花费很长时间

innodb_open_files:InnoDB能打开的.ibd文件个数,最好足够使所有的.ibd文件都打开

mysql load settings_Mysql high performance: Memory setting相关推荐

  1. mysql load xml_MySQL的SQL语句 - 数据操作语句(10)- LOAD XML 语句

    LOAD XML 语句 1. LOAD XML 2. [LOW_PRIORITY | CONCURRENT] [LOCAL] 3. INFILE 'file_name' 4. [REPLACE | I ...

  2. java mysql 文本导入数据语句_Java利用MYSQL LOAD DATA LOCAL INFILE实现大批量导入数据到MySQL...

    Mysql load data的使用 数据库中,最常见的写入数据方式是通过SQL INSERT来写入,另外就是通过备份文件恢复数据库,这种备份文件在MySQL中是SQL脚本,实际上执行的还是在批量IN ...

  3. mysql load data infile 重写_mysql load data infile 命令的数据导入

    文章介绍了mysql load data infile 命令的数据导入,该方式比直接的insert的效率要高,按照官方的说法是要比insert语句快上20倍,有需要的朋友可参考. 使用方式如下: 代码 ...

  4. 解决mysql load data加载本地null数据,表里出现0的情况

    解决mysql load data加载本地null数据,表里出现0的情况 问题说明: sql执行语句如下代码块: ---- 欢迎讨论沟通 ---- 问题说明: 本人在使用mysql加载本地数据过程中, ...

  5. MySQL load data 快速导入大批量数据

    load data 简介 MySQL load data 语句能快速将一个文本文件的内容导入到对应的数据库表中(一般文本的一行对应表的一条记录). 数据库应用程序开发中,涉及大批量数据需要插入时,使用 ...

  6. MySQL Load data local infile蜜罐

    ​MySQL Load data infile是有一个很有意思的功能,最早接触的时候,没有太过在意,后来在安全扫描中,被提示需要关闭local_infile选项(当然,默认该选项就是关闭的,只是安全扫 ...

  7. MySQL LOAD DATA INFILE 导入 CSV 格式数据

    主要介绍将 Neo4j 数据库中数据全部导入到 MySQL 数据库中,将 Neo4j 数据导出为 CSV 格式数据,然后再将 CSV 格式数据导入到 mysql 中. 前半部分,即 Neo4j 数据导 ...

  8. mysql optimize 参数查看_Mysql High Performance:Optimize Setting

    Tuning I/O 1. 影响同步数据到disc和恢复数据,因为涉及到了io,对性能影响非常大,其实是在性能与数据安全性上找一个平衡 2. MyISAM delay_key_write:延缓inde ...

  9. MYSQL深潜 - 剖析Performance Schema内存管理

    简介: 本文主要是通过对PFS引擎的内存管理的源码的阅读,解读PFS内存分配及释放原理,深入剖析其中存在的一些问题,以及一些改进思路.本文源代码分析基于Mysql-8.0.24版本. 作者 | 之枢 ...

最新文章

  1. 总结—什么妖引起的MongoDB副本集初始化失败?
  2. WPF最大化避免覆盖任务栏
  3. java第七章多线程_第七章 多线程
  4. UNIX再学习 -- 系统数据文件和信息
  5. 桶排序(BucketSort)(java)
  6. 你在孩子身上偷的懒,终将会变成最大的遗憾
  7. 虚拟机环境下DPDK运行时的一些错误解决
  8. C#中,将16进制转换为有符号的10进制的方法(支持带0x标志,支持任意字符串)
  9. myeclipse 创建 maven项目的时候出现:invalid project description 解决方法
  10. C++中对私有成员变量进行赋值
  11. linux 软件装哪个目录下,Linux查看软件安装目录及位置 方法
  12. linux可上网limbo镜像,limbo模拟器win10镜像
  13. swf文件转mp4视频格式的失败与成功
  14. 双目视觉(1)---立体匹配介绍
  15. 达人评测联想小新笔记本air14 2023和联想小新pro162022款选那个好
  16. TensorFlow Object Detection API Custom Object Hangs On
  17. 器件选型篇:二极管之肖特基选型
  18. English马力-Lesson1(MY MYSELF,IRENE)
  19. python常用基础库:标准库和第三方库
  20. USRP 型号对比与挑选

热门文章

  1. cocos2dx对所有子节点设置透明度
  2. Windows Phone 设置DatePicker图标
  3. dedecms 会员网站UID注册名转MID
  4. day20-自定义分页2
  5. 安装高可用性虚拟机,livemigration系列之九
  6. Symantec Endpoint Protection下载方法
  7. Vue2.0学习笔记一 :各种表达式
  8. Android 仿新版QQ的tab下面拖拽标记为已读的效果
  9. mysql Got error 28 from storage engine
  10. 中国象棋人机博弈程序(扁平化棋局) C语言实现