MySQL内存表与一般表差异解析及SHOWTABLESTATUS使用技巧

创始人
2024-12-20 11:35:30
0 次浏览
0 评论

mysql内存表和一般表的区别

我们仍然使用两个会话,一个会话运行,用于运行主SQL;另一个会话ps,用于观察performance_schema:

主会话线程数为29,

重置performance_schema中的统计信息。

临时表的表大小限制取决于参数tmp_table_size和max_heap_table_size中较小的一个。
在我们的实验中,我们将max_heap_table_size设置为example。

我们将会话级临时表大小设置为2M(小于上次实验中临时表使用的空间),并使用临时表执行SQL:

查看内存分配记录:

你会发现内存分配略大于2M。
我们猜测临时表会比配置消耗稍多,可以忽略。

查看语句的特征值:

可以看到该语句使用了需要写入磁盘的临时表。

那么这个临时表使用了多少磁盘空间呢?

我们在performance_schema中启用等待相关的统计项:

重做实验并跳过。

查看performance_schema的统计值:

可以看到几个现象:

1.临时表空间写入了7.92MiB的数据。

2.这些数据是在语句写入后慢慢地、逐渐地写入的。

我们来看看这些写操作的特点。
我们在实验03中使用的这个方法:

可以看到写入线程是page_clean_thread,这是一个脏操作,所以你可以理解为什么数据写入速度慢。

还可以看到每个IO操作的大小为16K,也就是刷新数据页的操作。

结论:

我们可以看到,

1.当内存不足时,MySQL基本都会遵守max_heap_table_size的设置。
不够。
,直接将表传输到磁盘存储。

2.由于引擎不同(内存表引擎为heap,磁盘表引擎遵循internal_tmp_disk_storage_engine的配置),本实验写入磁盘的数据量与实验05中内存使用的数据量不同。

3.如果临时表使用磁盘,并且表引擎配置为InnoDB,那么即使临时表在短期SQL中使用,使用后释放,释放后脏页也会被flush。
在磁盘中,消耗了一些IO。

MySQL之SHOWTABLESTATUS简介

大家好,我是李哥,今天给大家分享一些关于MySQL的小知识!

showtablestatus语句主要用于显示表相关信息。
使用的时候,有的同学可能用得很少。
例如,输入以下命令登录MySQL:username@host:~#mysql-uroot-p,然后使用命令:usedatabase_name选择数据库,然后输入showtablestatus查看数据库中所有表的信息;数据库。

查看表格信息时,\G命令非常有用。
它可以将显示结果旋转90度至纵向,使信息更易于阅读。

使用showtablestatus;语句,可以获得以下信息:

Name:表的名称Engine:表的存储引擎,在旧版本中通常称为Type。
版本:表的.frm文件的版本号。
Row_format:行格式。
对于MyISAM表,可选值为Dynamic、Fixed或Compressed。
行数:表中的行数。
avg_row_length:每行包含的平均字节数。
Data_length:表数据的大小(以字节为单位)。
max_data_length:表的最大数据容量。
Index_length:索引大小(以字节为单位)。
data_free:已分配但当前未使用的空间。
auto_increment:下一个auto_increment的值。
create_time:表创建时间。
update_time:表数据最后一次修改的时间。
Check_time:上次使用checktable命令或myisamchk工具检查表的时间。
排序规则:默认表字符集和字符列的排序规则。
校验和:启用后,将存储整个表的实时校验和。
Create_options:创建表时指定的附加选项。
Comment:包含创建表时的注释、InnoDB表空间的剩余空间信息或VIEW的文本。

这些信息对于优化数据库性能、管理和维护表结构非常有用。
希望这次交流能够对您有所帮助!

文章标签:
MySQL 内存表
热门文章
1
高效掌握:CMD命令轻松启动、关闭及登录... 如何用cmd命令快速启动和关闭mysql数据库服务开发中经常使用MySQL数据库...

2
MySQL分区删除技巧与8.0版本新特性... mysql删除分区在MySQL中,删除分区操作主要使用“可替代”的命令与“ dr...

3
Python代码实现:如何判断三角形的三... python三角形三条边长,判断能否构成三角形Python三角形的三个长边如下:...

4
深度解析:MySQL查询语句执行顺序及优... mysql查询语句执行顺序当这是由于执行SQL的过程时,了解其过程很重要。 ...

5
SQL教程:使用SUBSTRING和IN... sql取特定字符的前面几位字符selectsubstr('L-0FCLDRBCT...

6
MySQL日期差异计算方法:轻松获取日期... MySQL计算时间差两日期相减得月份mysql两时间相减得月MySQL计算时间之...

7
MySQL及SQL查询获取前10条数据方... MySql查询前10条数据sql语句是从MySQL获取前1 0个数据的SQL查询...

8
MySQL启动问题排查与解决指南 Mysql为什么启动不了如果要配置MySQL,则遇到无法启动的问题,可能是由于配...

9
DbVisualizer添加MySQL数... 如何在DbVisualizer中添加本地mysql数据库由于DbVisualiz...

10
SQL字段默认值设置全攻略:轻松实现自动... sql如何设置字段默认值设置SQL中某个字段的默认值;需要遵循几个步骤。首先您需...