??innodb_temp_data_file_path 定义了用户创建的临时表使用的回滚段的存储文件的相对路径、名字、大小和属性 , 该文件是全局临时表空间(ibtmp1);
??可以使用语句查询全局临时表空间的数据文件大?。?
SQL 什么时候产生临时表|临时文件呢?
??需要用到临时表或临时文件的时候,optimizer 自然会创建使用(感觉是废话,但是又觉得有道理=.=!);
??(想象能力强的,可以牢记上面这句话;想象能力弱的 , 只能死记下面的 SQL 了 。我也弱 , 此处有个疲惫的微笑??)
下面列举一些 server 在处理 SQL 时,可能会创建内部临时表的 SQL :
??SQL 包含 union | union distinct 关键字
??SQL 中存在派生表
??SQL 中包含 with 关键字
??SQL 中的order by 和 group by 的字段不同
??SQL 为多表 update
??SQL 中包含 distinct 和 order by 两个关键字
我们可以通过下面两种方式判断 SQL 语句是否使用了临时表空间:
??# 如果 explain 的 Extra 列包含 Using temporary ,那么说明会使用临时空间,如果包含 Using filesort,那么说明会使用文件排序(临时文件);
??如果执行 SQL 后,表的 ID 列变为了show processlist 中的 id 列的值,那么说明 SQL 语句使用了临时表空间
SQL创建的内部临时表的存储信息:
??SQL 创建内部临时表时,优先选择在内存中 , 默认使用 TempTable 存储引擎(由参数 internal_tmp_mem_storage_engine 确定),
??当 temptable 使用的内存量超过 temptable_max_ram 定义的大小时,
??由 temptable_use_mmap 确定是使用内存映射文件的方式还是 InnoDB 磁盘内部临时表的方式存储数据
??(temptable_use_mmap 参数在 MySQL 8.0.16 引入,MySQL 8.0.26 版本不推荐,后续应该会移除);
??temptable_use_mmap 的功能将由MySQL 8.0.23 版本引入的 temptable_max_mmap 代替,
??当 temptable_max_mmap=0 时,说明不使用内存映射文件,等价于 temptable_use_mmap=OFF ;
??当 temptable_max_mmap=N 时,N为正整数,包含了 temptable_use_mmap=ON 以及声明了允许为内存映射文件分配的最大内存量 。
??该参数的定义解决了这些文件使用过多空间的风险 。
??内存映射文件产生的临时文件会存放于 tmpdir 定义的目录中,在 TempTable 存储引擎关闭或 mysqld 进程关闭时 , 回收空间;
??当 SQL 创建的内部临时表 , 选择 MEMORY 存储引擎时 , 如果内存中的临时表变的太大,MySQL 将自动将其转为磁盘临时表;
??其能使用的内存上限为 min(tmp_table_size,max_heap_table_size);
监控 TempTable 从内存和磁盘上分配的空间:
??具体的字段含义见:Section 27.12.20.10, “Memory Summary Tables”.
监控内部临时表的创建:
??当在内存或磁盘上创建内部临时表,服务器会增加 Created_tmp_tables 的值;
??当在磁盘上创建内部临时表时,服务器会增加 Created_tmp_disk_tables 的值,
??如果在磁盘上创建了太多的内部临时表,请考虑增加 tmp_table_size 和 max_heap_table_size 的值;
??created_tmp_disk_tables 不计算在内存映射文件中创建的磁盘临时表;
例外项:
??临时表/临时文件一般较小,但是也存在需要大量空间的临时表/临时文件的需求:
因为这些例外项一般需要较大的空间 , 所以需要考虑是否要将其存放在独立的挂载点上 。
其他:
??列出由失败的 alter table 创建的隐藏临时表,这些临时表以#sql开头,可以使用 drop table 删除;
??通过 lsof +L1 可以查看标识为 delete , 但还未释放空间的文件 。
???如果想释放这些 delete 状态的文件,可以尝试下面的方法(不推荐 , 后果自负):
推荐阅读
- 电脑投屏直播怎么建粉丝群,怎么投屏到电脑直播
- 拍摄视频用什么验货,拍摄视频需要的材料
- 关于html5读取xml数据的信息
- delphi安卓游戏引擎,delphi 安卓
- c语言刷新页面的函数 c语言控制台刷新
- js按时间排序数据结构,js 排序数组里面的对象根据时间
- redis的同步数据结构的简单介绍
- 开直播教程文档,开直播教程文档怎么做
- linux中后退命令 linux后退快捷键