原文地址:http://software.intel.com/zh-cn/blogs/2010/09/01/mysql2mysql/
1.涉及到内存的配置参数
这些参数可以分成两部分,分别对应MySQL中的两个层次:服务器层和存储引擎层。
(1).MySQL服务器相关:
每个连接到MySQL服务器的线程都需要有自己的缓冲,默认为其分配256K。事务开始之后,则需要增加更多的空间。运行较小的查询可能仅给指定的线程增加少量的内存消耗,例如存储查询语句的空间等。但如果对数据表做复杂的操作比较复杂,例如排序则需要使用临时表,此时会分配大约read_buffer_size,sort_buffer_size,read_rnd_buffer_size,tmp_table_size大小的内存空间。不过它们只是在需要的时候才分配,并且在那些操作做完之后就释放了。
read_buffer_size是MySql读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySql会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能。
sort_buffer_size是MySql执行排序使用的缓冲大小。如果想要增加ORDER BY的速度,首先看是否可以让MySQL使用索引而不是额外的排序阶段。如果不能,可以尝试增加sort_buffer_size变量的大小。该变量会监测sort_merge_passed, sort_range, sort_rows, sort_scan的状况。通常较小的sort_merge_passed性能越高,但是也与workload的特性有关。
read_rnd_buffer_size是MySql的随机读缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,MySql会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySql会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大。
query_cache_size是MySql的查询缓冲大小。(从4.0.1开始,MySQL提供了查询缓冲机制)使用查询缓冲,MySQL将SELECT语句和查询结果存放在缓冲区中,今后对于同样的SELECT语句(区分大小写),将直接从缓冲区中读取结果。根据MySQL用户手册,使用查询缓冲最多可以达到238%的效率。
此外还有每个连接中会使用的一些变量会消耗少量内存。
(2).MyISAM引擎相关
key_buffer_size存储了所有index的缓存,一般我们设为16M,通过检查状态值
Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用'key_read%'获得用来显示状态数据)。key_buffer_size只对MyISAM表起作用。即使不使用MyISAM存储引擎,但是内部的临时磁盘表是MyISAM表,故也要使用该值。
(3).InnoDB引擎相关
innodb_buffer_pool_size对于InnoDB表来说,作用就相当于key_buffer_size对于MyISAM表的作用一样。InnoDB使用该参数指定大小的内存来缓冲数据和索引。对于单独的MySQL数据库服务器,手册上推荐把该值设置成物理内存的80%。
innodb_additional_mem_pool_size指定InnoDB用来存储数据字典和其他内部数据结构的内存池大小。缺省值是1M。通常不用太大,只要够用就行,应该与表结构的复杂度有关系。如果不够用,MySQL会在错误日志中写入一条警告信息。
innodb_log_buffer_size指定InnoDB用来存储日志数据的缓存大小,如果您的表操作中包含大量并发事务(或大规模事务),并且在事务提交前要求记录日志文件,请尽量调高此项值,以提高日志效率。
Key_buffer_size
Table_open_cache
Sort_buffer_size
Read_buffer_size
Net_buffer_length
Read_rnd_buffer_size
Innodb_buffer_pool_size
Innodb_additional_mem_pool_size
Innodb_log_buffer_size
Query_cache_size
2.Mysql中最小内存占用公式
key buffer
innodb buffer pool
innodb log buffer
innodb additional mempool
net buffer
sort buffer
myisam sort buffer
read buffer
join buffer
readrnd buffer
minmemoryneeded = globalbuffers + (threadbuffers * max_connections)
其中globalbuffers 包括:
threadbuffers 包括:
...没写完,待续...
分享到:
相关推荐
总的来说,"MySQL之InnoDB源码分析之page结构解析"是一个深入探讨数据库内部运作机制的主题,涵盖了数据库管理、数据存储、查询优化等多个方面。通过学习和理解这部分内容,不仅可以提升数据库的维护能力,也为...
MySQL是世界上最受欢迎的开源关系型数据库管理系统之一,其源码包提供了深入了解系统内部运作...总的来说,MySQL源码分析对于数据库开发者、运维人员或希望深入学习数据库原理的人来说,都是一个极其有价值的实践项目。
7. **内存管理和缓存策略**:理解内存分配、释放机制,以及如何通过调整缓冲池大小来优化性能。 通过深入阅读MySQL 5.5.25的源码,我们可以了解到数据库系统的底层运作,这对于提升数据库性能调优能力,解决实际...
MySQL是一款广泛使用的开源关系型数据库管理系统,以其高效...或者针对特定硬件环境调整内存分配策略,最大化硬件利用率。因此,对"高性能MySQL源码"的探索对于数据库管理员、开发者和系统架构师来说都具有很高的价值。
8. **Memory优化**:通过改进内存分配和减少内存碎片,提高了内存使用效率。 9. **SQL标准的扩展**:增加了对更多SQL标准功能的支持,比如窗口函数和Common Table Expressions(CTE)。 编译MySQL 5.7源码包的基本...
7. **内存管理**:MySQL使用自定义的内存池管理,如`sql/mem_root.h`定义的`MEM_ROOT`结构,用于高效地分配和回收内存。 8. **线程与并发**:MySQL在多线程环境下运行,`mysys/my_thread.h`和`mysys/thr_mutex.cc`...
`heap`可能涉及到内存管理,MySQL在处理大量数据时需要高效地分配和释放内存,这个部分的源代码将揭示其内存池管理策略。 `myisamchk`和`myisam`是MyISAM存储引擎的相关工具,`myisamchk`用于检查、修复和优化...
5.7.6. 访问控制, 阶段2:请求核实 5.7.7. 权限更改何时生效 5.7.8. 拒绝访问错误的原因 5.7.9. MySQL 4.1中的密码哈希处理 5.8. MySQL用户账户管理 5.8.1. MySQL用户名和密码 5.8.2. 向MySQL增加新用户账户 5.8.3. ...
- 优化了内存分配策略,减少了内存碎片,提高了内存利用率。 6. **JSON 支持**: 虽然 MySQL 5.6 不直接支持 JSON 数据类型,但可以使用 TEXT 或 BLOB 存储 JSON 文档,并通过内置函数进行解析和操作。 7. **...
标签中的“源码”可能提示问题可能与Ruby的内部实现或自定义C扩展有关,而“工具”可能是指用于诊断和修复问题的工具或技术。 在文件列表中,“libmySQL.dll”是一个动态链接库文件,通常用于连接MySQL数据库。这...
12. **内存管理**:优化了内存分配和管理,减少内存碎片,提高内存利用率。 总结,`mysql-5.5.46.tar.gz`源码包包含了许多关键特性,不仅提供了强大的数据库服务,还注重性能优化、安全性以及易用性。通过深入理解...
5.7.6. 访问控制, 阶段2:请求核实 5.7.7. 权限更改何时生效 5.7.8. 拒绝访问错误的原因 5.7.9. MySQL 4.1中的密码哈希处理 5.8. MySQL用户账户管理 5.8.1. MySQL用户名和密码 5.8.2. 向MySQL增加新用户账户 5.8.3. ...
访问控制, 阶段2:请求核实 5.7.7. 权限更改何时生效 5.7.8. 拒绝访问错误的原因 5.7.9. MySQL 4.1中的密码哈希处理 5.8. MySQL用户账户管理 5.8.1. MySQL用户名和密码 5.8.2. 向MySQL增加新用户...
5.7.6. 访问控制, 阶段2:请求核实 5.7.7. 权限更改何时生效 5.7.8. 拒绝访问错误的原因 5.7.9. MySQL 4.1中的密码哈希处理 5.8. MySQL用户账户管理 5.8.1. MySQL用户名和密码 5.8.2. 向MySQL增加新用户账户 ...
5.7.6. 访问控制, 阶段2:请求核实 5.7.7. 权限更改何时生效 5.7.8. 拒绝访问错误的原因 5.7.9. MySQL 4.1中的密码哈希处理 5.8. MySQL用户账户管理 5.8.1. MySQL用户名和密码 5.8.2. 向MySQL增加新用户账户 5.8.3. ...
标题“mysql Unable to lock ./ibdata1, error: 11”所反映的问题是MySQL数据库在运行过程中遇到了一个常见的错误,提示无法锁定数据文件`ibdata1`,错误代码11。这个错误通常与数据库的表空间管理、并发操作或者...
本文将详细介绍MySQL 5.5.40版本的关键特性和源码分析。 首先,MySQL 5.5系列是MySQL的一个重大升级,它在性能、可扩展性以及新功能方面都有显著提升。5.5.40作为该系列的一个稳定版本,主要关注于修复已知问题,...
5.7.6. 访问控制, 阶段2:请求核实 5.7.7. 权限更改何时生效 5.7.8. 拒绝访问错误的原因 5.7.9. MySQL 4.1中的密码哈希处理 5.8. MySQL用户账户管理 5.8.1. MySQL用户名和密码 5.8.2. 向MySQL增加新用户账户 5.8.3. ...
9. **内存管理**:改进了内存分配策略,减少了内存碎片,提高了内存利用率。 **源码安装流程:** 1. **解压源码**:首先,需要将"mysql-5.6.17.tar.gz"这个压缩包解压,通常使用`tar -zxvf mysql-5.6.17.tar.gz`...
5.7.6. 访问控制, 阶段2:请求核实 5.7.7. 权限更改何时生效 5.7.8. 拒绝访问错误的原因 5.7.9. MySQL 4.1中的密码哈希处理 5.8. MySQL用户账户管理 5.8.1. MySQL用户名和密码 5.8.2. 向MySQL增加新用户账户 ...