设置临时表大小

调整MySQL临时表设置
本文介绍了如何通过调整MySQL中的tmp_table_size和max_heap_table_size来优化临时表的性能,包括三种不同的设置方法及其查看方式。

转自【http://www.dedecms.com/knowledge/data-base/mysql/2012/0819/8024.html】

tmp_table_size 如果内存内的临时表超过该值,MySQL自动将它转换为硬盘上的MyISAM表。如果你执行许多高级GROUP BY查询并且有大量内存,则可以增加tmp_table_size的值。 max_heap_table_size 该变量设置MEMORY (HEAP)表可以增长到的最大空间大

tmp_table_size

如果内存内的临时表超过该值,MySQL自动将它转换为硬盘上的MyISAM表。如果你执行许多高级GROUP BY查询并且有大量内存,则可以增加tmp_table_size的值。


max_heap_table_size

该变量设置MEMORY (HEAP)表可以增长到的最大空间大小。该变量用来计算MEMORY表的MAX_ROWS值。在已有的MEMORY表上设置该变量没有效果,除非用CREATE TABLE或TRUNCATE TABLE等语句重新创建表。


如何设置: 
方法一,修改my.ini或my.cnf 
tmp_table_size=64M 
max_heap_table_size=32M 
此方法最大的缺点,是一旦重启,一切恢复默认值

方法二,mysqld命令行 
mysqld_safe --key_buffer_size=512K --sort_buffer_size=16K 
           --tmp_table_size=64M --max_heap_table_size=32M &

方法三,动态修改 
因为tmp_table_size和max_heap_table_size,都有session作用域,所以,一般情况下,尽量这样做吧 
SET SESSION tmp_table_size=64*1024*1024 
SET SESSION max_heap_table_size=32*1024*1024

修改好后如何查看: 
查看服务器配置信息 
SHOW VARIABLES WHERE Variable_name LIKE %tmp_table_size%

查看服务器运行信息 
SHOW STATUS

如何使用JDBC获得他们的值: 
SELECT @@tmp_table_size 
SELECT @@max_heap_table_size


<think>好的,我现在需要回答用户关于如何查看MySQL临时表大小的命令的问题。首先,我需要明确用户的具体需求。用户可能想了解当前MySQL实例中临时表的使用情况,或者配置中关于临时表大小限制。 接下来,我应该回忆一下MySQL中临时表的相关知识。临时表分为内存临时表和磁盘临时表,当内存临时表大小超过一定限制后,MySQL会将它们转换为磁盘临时表,通常存储在tmpdir目录下,默认是磁盘上的文件。因此,用户可能关心的是这两个方面:当前临时表的使用情况和配置参数。 首先,关于查看当前临时表的使用情况,我记得MySQL有一个状态变量叫做Created_tmp_disk_tables,它记录了创建磁盘临时表的次数,而Created_tmp_tables则记录了所有临时表的创建次数。不过这些是计数器,显示的是自服务器启动以来的总次数,而不是实时的大小。这可能不是用户想要的直接查看临时表大小的方法,但可以间接反映是否有大量磁盘临时表被创建,可能提示需要整内存临时表大小限制。 然后,配置参数方面,内存临时表的最大大小由tmp_table_size和max_heap_table_size两个参数控制,这两个参数中较小的那个决定了内存临时表的最大大小。如果临时表超过这个大小,就会被转换为磁盘临时表。因此,用户可能需要检查这两个参数的设置,以了解当前的限制。 不过用户的问题是如何“查看临时表大小”,这可能指的是当前正在使用的临时表占用的空间,或者配置的大小。对于实时监控正在使用的临时表大小,标准的MySQL命令可能没有直接显示的方法。但可能有其他途径,比如通过性能模式(Performance Schema)或者信息模式(INFORMATION_SCHEMA)来查询。 需要确认的是,在MySQL中是否有这样的表或变量可以查看当前临时表占用的内存或磁盘空间。比如,在INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO中,可以查看InnoDB使用的临时表信息,但可能仅限于InnoDB引擎的临时表,且可能不显示大小信息。 另外,可以通过查看服务器的文件系统,直接查看tmpdir目录下的临时文件大小。默认情况下,MySQL的临时文件存放在/tmp、/var/tmp或者由配置参数tmpdir指定的目录中。用户可以使用系统命令如ls或du来查看这些文件的大小,但这属于外部操作,并非MySQL内部的命令。 可能还需要考虑版本差异,比如在MySQL的不同版本中,是否有不同的方法可用。例如,Performance Schema在较新的版本中可能有更多的监控指标。 总结下来,用户可能需要两方面的信息:一是如何查看当前配置的临时表大小限制,二是如何监控实际使用的临时表大小。对于前者,可以通过SHOW VARIABLES命令查看tmp_table_size和max_heap_table_size的值。对于后者,可能需要结合状态变量和文件系统检查。 接下来需要验证这些思路是否正确。例如,执行SHOW VARIABLES LIKE 'tmp_table_size';和SHOW VARIABLES LIKE 'max_heap_table_size';可以显示当前配置。而SHOW STATUS LIKE 'Created_tmp_disk_tables';可以显示磁盘临时表的创建次数。 但用户的问题是关于“临时表大小”的命令,可能希望直接获取当前临时表占用的内存或磁盘空间。然而,标准MySQL命令可能不直接提供这些信息。这时候可能需要使用间接的方法,比如监控状态变量的增长情况,或者检查临时目录的文件大小。 此外,可能提到内部临时表,比如在执行某些查询时,MySQL可能会使用内部临时表,这些也可能受到配置参数的影响,例如internal_tmp_mem_storage_engine和temptable_max_ram(在MySQL 8.0中引入),这些参数影响内存的使用。 最后,应该将这些步骤整理成一个清晰的回答,分点说明如何查看配置参数、监控临时表使用情况,以及检查临时文件目录的方法,同时指出没有直接查看实时大小的命令,但可以通过这些间接方法来评估。</think>要查看MySQL临时表的相关配置及使用情况,可以通过以下步骤操作: --- ### 一、**查看内存临时表大小配置** MySQL通过 `tmp_table_size` 和 `max_heap_table_size` 控制内存临时表的最大容量(两者取较小值为实际限制)。 **操作命令:** ```sql SHOW VARIABLES LIKE 'tmp_table_size'; -- 默认16MB SHOW VARIABLES LIKE 'max_heap_table_size'; -- 默认16MB ``` --- ### 二、**监控临时表使用状态** 1. **统计内存/磁盘临时表创建次数** 通过状态变量 `Created_tmp_tables`(内存临时表)和 `Created_tmp_disk_tables`(磁盘临时表)观察使用频率: ```sql SHOW STATUS LIKE 'Created_tmp_%'; ``` - **如果`Created_tmp_disk_tables`值较高**,说明内存不足,需优化查询或大 `tmp_table_size`。 --- ### 三、**检查临时文件目录占用** 磁盘临时表存储在MySQL的 `tmpdir` 目录中(默认路径为 `/tmp`)。 1. **查看临时目录路径**: ```sql SHOW VARIABLES LIKE 'tmpdir'; ``` 2. **通过系统命令查看文件大小**(需操作系统权限): ```bash ls -lh /tmp # 查看临时文件列表 du -sh /tmp/mysql_*.ibt # 估算临时文件总大小(InnoDB引擎) ``` --- ### 四、**MySQL 8.0+ 的额外参数** 若使用MySQL 8.0及以上版本,可关注以下参数: - `internal_tmp_mem_storage_engine`: 内存临时表存储引擎(默认`TempTable`)。 - `temptable_max_ram`: `TempTable`引擎的最大内存限制。 查看命令: ```sql SHOW VARIABLES LIKE 'temptable_max_ram'; ``` --- ### 五、**优化建议** 1. **大内存限制**: 在配置文件 `my.cnf` 中增加: ```ini tmp_table_size = 256M max_heap_table_size = 256M ``` 2. **优化查询**:避免复杂子查询、未索引的排序(`ORDER BY`/`GROUP BY`),减少临时表生成。 --- ### 总结 MySQL没有直接命令显示“实时临时表大小”,但通过上述方法可间接评估: 1. 查看配置参数限制。 2. 监控状态变量统计。 3. 检查操作系统临时文件目录。 若磁盘临时表频繁使用,需优化查询或整内存参数。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值