mysql中如何在存储过中立创建临时表

上周正在浏览 MySQL 文档。

需要临时表。

例如,GROUP BY。

或按顺序订购。

还有一个 UNION。

还将使用子查询。

在内存或磁盘上创建。

如果内存不足,则转移到磁盘。

内存容量有限。

调用tmp_table_size。

或 max_heap_table_size。

取较小的值。

默认值为 1 6 MB。

如果数据量很大。

或者没有优化。

您可以增加该值。

设置大小时,请考虑内存量。

考虑并行度。

不能无限大。

TEXT 或 BLOB 列。

如果该值小于阈值,磁盘也会被放置。

忘记它吧。

mysql 参数调优(10)之 tmp_table_size 优化临时表

如果tmp_table_size太小,会导致性能下降,例如从4 秒降到1 8 秒。
这是一个陷阱。
不要相信默认值。

如何通过宝塔面板实现MySQL性能简单调优

说实话,使用宝塔面板来调优MySQL是非常容易的,尤其是对于新手来说。
以前给客户做服务器维护的时候,总会有一些客户问我怎么做,我就直接带他们到宝塔的“性能调优”页面,一步一步跟着他们做。

查看活动连接数。
我有一个客户端,其最大连接数达到了 max_connections 的 9 0%。
我建议他先加到2 00,过两天再回来看看。
这一招很有效,因为直接模仿别人的经历很容易惹上麻烦。
我记得有一个客户一次性加了5 00,服务器的CPU就爆炸了。
那一刻他脸绿了。

关于线程缓存的有趣之处在于,我实际测量过,当线程缓存命中率低于8 5 %时,增加thread_cache_size是非常明显的。
当电商客户端执行事件时,数据库并发突然急剧增加。
我临时将thread_cache_size从6 4 增加到1 2 8 ,CPU使用率立即下降了3 0%。
不过有朋友告诉我,他的旧服务器加了2 5 6 后没有效果,可能要看具体的硬件。

我在使用 InnoDB 时遇到了很多问题。
客户使用MyISAM引擎。
我不断添加key_buffer_size,但结果是无法运行。
然后我发现我必须先更换发动机。
某金融客户购买了新的云服务器,innodb_buffer_pool_size设置过大。
结果,内存不足,服务器卡住了。
因此,在调整参数时,首先要查看硬件配置,不能盲目进行。

基本上不再需要查询缓存了。
我有一个客户端在使用Redis后直接将query_cache_size设置为0。
他说这个方法比调整key_buffer_size要麻烦很多。
然而,一位在CMS工作的朋友坚持要打开它。
结果,当SQL优化不好时,查询缓存就会被持有。

临时表很有趣。
有客户在订单系统上工作,临时排程创建比例达到1 0%。
我不断增加tmp_table_size到2 04 8 他说效果比增加innodb_buffer_pool_size要快。
但是有做大数据分析的朋友说SQL很复杂,SQL本身需要优化。

我已经多次处理过表锁定问题。
一位客户接着说表锁定很严重。
看到CPU没有飙升,我建议他切换到InnoDB并在备份后立即执行。
但有一位客户锁了桌子,导致交易系统崩溃。
然后发现某条查询语句处于死循环状态。
真是令人困惑。

宝塔推荐的方案固然是好事,但不要全信。
客户刚刚添加了所有推荐值,结果是内存立即爆炸。
我告诉他,要考虑实际情况。
比如业务高峰时间是晚上,所以我重点调整sort_buffer_size和table_table_size。

调整参数后,必须重新启动。
很多人忘记了这一步。
朋友调整参数后不重启,CPU飙升至2 00%。
他当时说我对他撒了谎。
老实说,你需要一次又一次地提醒客户这些细节,否则你的工作就白费了。

调优没有绝对的公式,要看具体情况。
我有客户说他们的系统很稳定,所以我没有太大改变参数。
但后来他说在运行活动时卡住了。
我当时就想笑,看来还得不断调整参数。