第一个设置是客户使用的数据库从站。那已经足够快了。第二个设置(现在)是我刚刚使用的数据库从站的复制。当前设置在查询执行时较慢(即使我不必共享 CPU 和内存),理论上这是因为 DBMS 不是“热”使用,但每次使用时 fx 都必须重新加载索引它。这会导致性能下降。结论是运行预定查询以保持数据库“温暖”。
我想知道三件直接相关的事情:
这种影响的主要原因是什么?是不是因为在每次对从属服务器进行小的写访问后都会复制到我的服务器上,索引会在执行查询之前首先加载到内存中?我的胆量告诉我有更复杂的事情发生。
查询必须如何以最佳方式使用数据库(计划的)来保持温暖和准备就绪?我知道这篇文章:MySQL 暖程序- 但我对通用查询不是很感兴趣,而是了解它背后的逻辑。
是什么决定了这种保温查询(或一组)的运行频率?
SHOW VARIABLES LIKE "%version%";
innodb_version 5.6.13-rel61.0
protocol_version 10
slave_type_conversions -
version 5.6.13-rc61.0
version_comment Percona Server (GPL), Release 61.0
version_compile_machine x86_64
version_compile_os Linux
Run Code Online (Sandbox Code Playgroud)
Mic*_*bot 10
数据库“热身”是真实的……但话说回来,人们为性能不佳的系统找借口也是真实的。这里的一个重要结论是,一旦服务器预热,它通常不会自发地再次冷却下来。
需要预热是因为当数据库的各种缓存填充有最相关的数据时,数据库的最佳性能才能实现,因为从内存中读取通常比从磁盘读取快得多。
InnoDB 有 InnoDB 缓冲池。MyISAM 有密钥缓存和操作系统缓存。然后还有 MySQL 查询缓存。MySQL 有打开的表缓存。这些结构中的部分或全部有助于实现服务器的理想性能。当服务器正在处理以其工作负载为特征的流量时,它往往已经缓存了最常用的——因此可能是最相关的数据。
卸下活动 MySQL 服务器的负载,您将不会看到它开始关闭表并从其缓存中逐出数据。如果你让它继续运行,那么明天再回到它,你会发现它仍然和你离开时一样温暖。
除非重新启动服务器进程,否则预热的需要通常不是需要的相关考虑因素。Percona Server 有一个功能可以在重启时预热服务器的 InnoDB 缓冲池,方法是存储指向关闭前内存中的页面的指针,并在启动时将这些页面重新加载到缓冲池中。
但是,您也可以通过从服务器的客户端进行完整备份(例如使用mysqldump大多数图形工具)来在某种程度上撤消预热良好的系统,但不能使用理解本机表空间的备份实用程序,例如innobackupex(如果我的了解该实用程序的工作原理是正确的),因为被备份的大部分数据可能是较旧的数据或与主要工作负载无关的数据,但仍可能导致其他数据从各种缓冲区和缓存中逐出。加载,在返回备份的路上。
您引用的问题中的逻辑是,在“真正的”查询开始执行工作之前,从表及其索引中读取数据将它们带入内存 - 预热。
一般来说,虽然......单个查询,运行一次,将预热执行该特定查询所需的任何结构。如果立即再次执行相同的查询仍然很慢,则预热不是问题。索引不会在每次使用时重新加载,除非缓冲区和缓存结构中存在空间竞争。
| 归档时间: |
|
| 查看次数: |
10228 次 |
| 最近记录: |