【Mysql 学习】Mysql 怎样使用内存

在应用的地方,给出与存储器使用相关的服务器变量的名字。

1 关键字缓冲区(变量key_buffer_size)由所有线程分享;当需要时,分配服务器使用的其他缓冲区。

2 每个连接使用一些线程特定的空间;一个栈(缺省64K,变量thread_stack)、一个连接缓冲区(变量

net_buffer_length)和一个结果缓冲区(变量net_buffer_length)。当需要时,连接缓冲区和结果缓冲区动

态地被扩大到max_allowed_packet。当一个查询正在运行当前查询的一个拷贝时,也分配字符串。

3 所有线程共享同一基存储器。

4 目前还没有什么是内存映射的(除了压缩表,但是那是另外一个的故事)。这是因为4GB的32位存储器空间

对最大的数据库来所不是足够大的。当一个64位寻址空间的系统变得更普遍时,我们可以为内存映射增加全

面的支持。
每个做顺序扫描的请求分配一个读缓冲区(变量record_buffer)。

5 所有联结均用一遍完成并且大多数联结可以甚至不用一张临时表来完成。最临时的表是基于内存的(HEAP)

表。有较大记录长度(以所有列的长度之和计算)的临时表或包含BLOB列的表在磁盘上存储。在MySQL版本

3.23.2前一个问题是如果一张HEAP表超过tmp_table_size的大小,你得到错误The table tbl_name is full

。在更新的版本中,这通过必要时自动将在内存的(HEAP)表转变为一个基于磁盘(MyISAM)的表来处理。为了

解决这个问题,你可以通过设置mysqld的tmp_table_size选项,或通过在客户程序中设置SQL的

SQL_BIG_TABLES选项增加临时表的大小。在MySQL 3.20中,临时表的最大尺寸是record_buffer*16,因此如

果你正在使用这个版本,你必须增加record_buffer值。你也可以使用--big-tables选项启动mysqld以总将

临时表存储在磁盘上,然而,这将影响许多复杂查询的速度。

6 大多数做排序的请求分配一个排序缓冲区和一个或二个临时文件。

几乎所有的语法分析和计算都在一家本地存储器中完成。对小项目没有内存开销并且一般的较慢存储器分配

和释放被避免。内存仅为出乎意料的大字符串分配(这用malloc()和free()完成)。

7 每个索引文件只被打开一次,并且数据文件为每个并发运行的线程打开一次。对每个并发线程,分配一个

表结构、对每列的列结构和大小为3 * n的一个缓冲区(这里n是最大的行长度,不算BLOB列)。一个BLOB使用

5 ~ 8个字节加上BLOB数据。

8 对每个有BLOB列的表,一个缓冲区动态地被扩大以便读入更大的BLOB值。如果你扫描一个表,分配与最大

BLOB值一样大的一个缓冲区。

9 对所有在用的表的表处理器被保存在一个缓存中并且作为一个FIFO管理。通常缓存有64个入口。如果一个表同时被2个运行的线程使用,缓存为此包含2个入口。

10 一个mysqladmin flush-tables命令关闭所有不在用的表并在当前执行的线程结束时,标记所有在用的表准备被关闭。这将有效地释放大多数在用的内存。
 
ps和其他系统状态程序可以报导mysqld使用很多内存。这可以是在不同的内存地址上的线程栈造成的。例如

,Solaris版本的ps将栈间未用的内存算作已用的内存。你可以通过用swap -s检查可用交换区来验证它。我

们用商业内存漏洞探查器测试了mysqld,因此应该有没有内存漏洞。 

时间: 2024-09-10 16:49:03

【Mysql 学习】Mysql 怎样使用内存的相关文章

[MySQL学习] MySQL压缩表

以下是在阅读官方文档时的笔记 官方文档: http://dev.mysql.com/doc/refman/5.6/en/innodb-compression.html#innodb-compression-tuning //////////////////////////////////////////////////////////////////////// 关于压缩表,可以调整的参数看起来只有key_block_size,在建表时指定,意味着innodb会将page压缩到指定的大小,例如,

[MySQL学习] MySQL 5.6 improvement for troubleshooting

本文基于Sveta(Oracle的Principle Technical Support Engineer )的博文"My eighteen MySQL 5.6 favorite troubleshooting improvements",原文地址如下:https://blogs.oracle.com/svetasmirnova/entry/my_18_mysql_5_6 原文针对每个点介绍的比较粗略,这里会对内容做一些扩展,也是我看这篇博客时的笔记,聚合了查阅的相关资料   1.对U

[MySQL学习] MySQL/Innodb shutdown流程

写的比较简略////// ----------- 我们通过mysqladmin来进行shutdown,会对mysqld发送SIGKILL信号,当接收到信号后,mysqld创建一个新的线程,线程调用函数为kill_server_thread 另外还可以通过调用COM_SHUTDOWN来关闭mysqld,没尝试过.当然最终调用的函数kill_server_thread函数. kill_server_thread->kill_server 设置kill_in_progress=true,防止重复关闭m

我的MYSQL学习心得(一) 简单语法

使用MYSQL有一段时间了,由于公司使用SQLSERVER和MYSQL,而且服务器数量和数据库数量都比较多 管理起来比较吃力,在学习MYSQL期间我一直跟SQLSERVER进行对比   第一期主要是学习MYSQL的基本语法,陆续还有第二.第三.第四期,大家敬请期待o(∩_∩)o  语法的差异 我这里主要说语法的不同 1.默认约束 区别:mysql里面DEFAULT关键字后面是不用加括号的 --sqlserver CREATE TABLE emp ( id INT DEFAULT(12) ) --

我的MYSQL学习心得(十四) 备份和恢复

原文:我的MYSQL学习心得(十四) 备份和恢复 我的MYSQL学习心得(十四) 备份和恢复 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(九) 索引 我的MYSQL学习心得(十) 自定义存储过程

我的MYSQL学习心得(十六) 优化

原文:我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(九) 索引 我的MYSQL学习心得(十) 自定义存储过程和函数 我的

我的MYSQL学习心得(六)

原文:我的MYSQL学习心得(六) 我的MYSQL学习心得(六) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL学习心得(五) 这一节主要介绍MYSQL里的函数,MYSQL里的函数很多,我这里主要介绍MYSQL里有而SQLSERVER没有的函数 数学函数 1.求余函数MOD(X,Y) MOD(X,Y)返回x被y除后的余数,MOD()对于带有小数部分的数值也起作用,他返回除法运算后的精确余数 SELECT MO

Mysql学习笔记(九)索引查询优化

原文:Mysql学习笔记(九)索引查询优化 PS:上网再次看了一下数据库关于索引的一些细节...感觉自己学的东西有点少...又再次的啃了啃索引.... 学习内容: 索引查询优化... 上一章说道的索引还不是特别的详细,再补充一些具体的细节... 1.B-Tree索引... B-tree结构被称为平衡多路查找树...其数据结构为:     这就是其数据结构图...我们没必要完全的理解其中的原理..并且我也不会做过多的原理介绍...我们只需要知道数据库是以这种方式进行存储数据的就可以了...   m

用Oracle的眼光来学习MySQL 5.7的sys(下)(r11笔记第25天)

昨天写了篇分析sys的文章,用Oracle的眼光来学习MySQL 5.7的sys(上)(r11笔记第24天)收到了一些朋友的反馈,还不错,今天继续努力,再整理一篇. sys还是很有借鉴意义     今天还和同事偶然聊起sys schema的事情,我觉得有几个地方要值得借鉴. 1)原本需要结合information_schema,performance_schema查询的方式,现在有了视图的方式,显示更加直观 2)sys schema的有些功能在早期版本可能无从查起,或者很难查询,现在这些因为新版

学习mysql数据库主从同步复制原理

MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对MySQL有更高性能.更高可靠性要求的场合.与之对应的是另一个同步技术是MySQL Cluster,但因为MySQL Cluster配置比较复杂,所以使用者较少. MySQL的Replication是一个异步复制的过程(mysql5.1.7以上版本分为异步复制和半同步两种模式),它是从一个Mysql instance(instance英文为实例)(我们称之为Master)复制到