我有一个用于 mysql 临时目录的 768M tmpfs 目录。在大日期范围内运行报告时,它偶尔会填满。当发生这种情况时,报告失败并且我收到错误 28。
这实际上对我来说似乎可以接受,因为它可以防止查询运行时间过长并给服务器增加负载。(我认为)
使用 tmpfs 的优势是使用临时表的查询运行速度提高了 50%。
我的问题是:当插入或替换正在运行时 tmpfs 是否已满,这会失败吗?
此外,当 mysql 将目录填满时,当查询失败时,文件将被删除。会有没有的情况吗?
你认为我对 MySQL 临时目录使用 /tmp 会导致任何问题吗?我有大约 50 个并发连接,但并非所有连接都同时运行报告。
不使用 tmpfs 的优缺点是什么?
如果您的 50 个连接都想执行需要 tmp 表的 SELECT,即使是很小的连接,它们也可能会溢出 tmpfs 并左右失败。
我更喜欢让 tmp 表与其他所有文件系统位于同一文件系统中。这样,当流量激增时,它就不会随意造成麻烦。
同时,我跟踪慢日志并积极处理任何慢查询。请注意,使用大 tmp 表的查询往往很慢,因此 slowlog 通常会捕获它们。
通常,优化查询将提供超过 50% 的改进。
优化查询会减少“负载”。
在我的书中,50 个实际上同时运行的并发连接(不仅仅是 SHOW PROCESSLIST 中的“睡眠”)是不可接受的。
当查询终止时,它应该删除 tmp 表。如果服务器崩溃,tmp 表有可能会保留下来。这经常发生在 ALTER 中。
当一个写操作中途死掉,而且表是Engine=MyISAM,写就会部分完成,不知道完成了多少,没有完成多少。例子:
INSERT ... SELECT ...
和DELETE ... WHERE ... SELECT ...