mysql load settings_Mysql high performance: Memory setting
概述
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相关推荐
- 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 ...
- java mysql 文本导入数据语句_Java利用MYSQL LOAD DATA LOCAL INFILE实现大批量导入数据到MySQL...
Mysql load data的使用 数据库中,最常见的写入数据方式是通过SQL INSERT来写入,另外就是通过备份文件恢复数据库,这种备份文件在MySQL中是SQL脚本,实际上执行的还是在批量IN ...
- mysql load data infile 重写_mysql load data infile 命令的数据导入
文章介绍了mysql load data infile 命令的数据导入,该方式比直接的insert的效率要高,按照官方的说法是要比insert语句快上20倍,有需要的朋友可参考. 使用方式如下: 代码 ...
- 解决mysql load data加载本地null数据,表里出现0的情况
解决mysql load data加载本地null数据,表里出现0的情况 问题说明: sql执行语句如下代码块: ---- 欢迎讨论沟通 ---- 问题说明: 本人在使用mysql加载本地数据过程中, ...
- MySQL load data 快速导入大批量数据
load data 简介 MySQL load data 语句能快速将一个文本文件的内容导入到对应的数据库表中(一般文本的一行对应表的一条记录). 数据库应用程序开发中,涉及大批量数据需要插入时,使用 ...
- MySQL Load data local infile蜜罐
MySQL Load data infile是有一个很有意思的功能,最早接触的时候,没有太过在意,后来在安全扫描中,被提示需要关闭local_infile选项(当然,默认该选项就是关闭的,只是安全扫 ...
- MySQL LOAD DATA INFILE 导入 CSV 格式数据
主要介绍将 Neo4j 数据库中数据全部导入到 MySQL 数据库中,将 Neo4j 数据导出为 CSV 格式数据,然后再将 CSV 格式数据导入到 mysql 中. 前半部分,即 Neo4j 数据导 ...
- mysql optimize 参数查看_Mysql High Performance:Optimize Setting
Tuning I/O 1. 影响同步数据到disc和恢复数据,因为涉及到了io,对性能影响非常大,其实是在性能与数据安全性上找一个平衡 2. MyISAM delay_key_write:延缓inde ...
- MYSQL深潜 - 剖析Performance Schema内存管理
简介: 本文主要是通过对PFS引擎的内存管理的源码的阅读,解读PFS内存分配及释放原理,深入剖析其中存在的一些问题,以及一些改进思路.本文源代码分析基于Mysql-8.0.24版本. 作者 | 之枢 ...
最新文章
- 总结—什么妖引起的MongoDB副本集初始化失败?
- WPF最大化避免覆盖任务栏
- java第七章多线程_第七章 多线程
- UNIX再学习 -- 系统数据文件和信息
- 桶排序(BucketSort)(java)
- 你在孩子身上偷的懒,终将会变成最大的遗憾
- 虚拟机环境下DPDK运行时的一些错误解决
- C#中,将16进制转换为有符号的10进制的方法(支持带0x标志,支持任意字符串)
- myeclipse 创建 maven项目的时候出现:invalid project description 解决方法
- C++中对私有成员变量进行赋值
- linux 软件装哪个目录下,Linux查看软件安装目录及位置 方法
- linux可上网limbo镜像,limbo模拟器win10镜像
- swf文件转mp4视频格式的失败与成功
- 双目视觉(1)---立体匹配介绍
- 达人评测联想小新笔记本air14 2023和联想小新pro162022款选那个好
- TensorFlow Object Detection API Custom Object Hangs On
- 器件选型篇:二极管之肖特基选型
- English马力-Lesson1(MY MYSELF,IRENE)
- python常用基础库:标准库和第三方库
- USRP 型号对比与挑选