MySQL内存表与一般表差异解析及SHOWTABLESTATUS使用技巧
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的文本。
这些信息对于优化数据库性能、管理和维护表结构非常有用。
希望这次交流能够对您有所帮助!