介绍性能顾问。
当二进制日志使用量超过二进制日志缓存内存限制时,说明磁盘操作过多。为了获得最佳性能,在二进制日志中移动的事务应该包含在二进制日志缓存中。
有关二进制日志和二进制日志缓存的更多信息,请参见二进制日志.
默认频率00:05:00
默认启用自动关闭没有
控件中按等待类型全局公开文件I/O的当前摘要sys.x io_global_by_wait_by_latency美元
视图。
该建议器没有可配置的阈值,用于填充图形和表数据库文件I / O报告。如果Advisor被禁用,报告将继续显示历史数据,但不显示任何新数据。
如果构建临时表所需的空间超过其中之一tmp_table_size
或max_heap_table_size
, MySQL在服务器的tmpdir
目录中。另外,具有TEXT或BLOB列的表会自动放在磁盘上。
出于性能考虑,最好在内存中创建大多数临时表,而在磁盘上创建超大的临时表。
默认频率00:05:00
默认启用自动关闭没有
根据环境、存储引擎和其他因素的不同,一个进程可能正在使用或访问另一个进程所需的资源(例如表或行),而第二个进程在第一个进程释放该资源之前无法继续。在这种情况下,第二个进程处于锁定状态,直到资源被释放。如果许多进程处于锁定状态,这可能是与资源争用相关的严重问题的迹象,或者长时间运行的会话在应该释放当前持有的锁时却没有释放。
默认频率00:01:00
默认启用自动关闭没有
大多数应用程序和数据库都被设计为非常快速地执行查询。如果许多查询需要很长时间来执行(超过几秒钟),这可能是出现问题的迹象。在这种情况下,可能需要调优或重写查询,或添加索引以提高性能。在其他情况下,数据库模式可能必须重新设计。
默认频率00:01:00
默认启用自动关闭没有
大多数应用程序和数据库都被设计为非常快速地执行查询,并避免资源争用,即一个查询等待另一个查询释放某个共享资源上的锁。如果许多查询被锁定并且执行时间很长(超过几秒钟),这可能是性能问题和资源争用的迹象。在这种情况下,可能需要调优或重写查询,或添加索引以提高性能。在其他情况下,数据库模式可能必须重新设计。
默认频率00:01:00
默认启用自动关闭没有
如果flush_time
设置为非零值,则每隔flush_time秒关闭所有表,以释放资源并将未刷新的数据同步到磁盘。如果您的系统是不可靠的,并且倾向于经常锁定或重新启动,那么以这种方式强制取消表更改会降低性能,但可以减少表损坏或数据丢失的机会。我们建议只在Windows或资源最少的系统上使用此选项。
默认频率06:00:00
默认启用自动关闭没有
目标服务器似乎没有有效地使用索引。的值Handler_read_rnd_next
而且Handler_read_rnd
,它们反映了通过全表扫描读取的行数,与表示索引访问的Handler变量(例如Handler_read_key
,Handler_read_next
,等等。您应该检查表和查询,以便正确使用索引。
默认频率00:05:00
默认启用自动关闭没有
不同的值innodb_flush_method
对InnoDB性能有显著影响。在某些版本的GNU/Linux和Unix中,通过调用fsync ()
(InnoDB默认使用)或其他类似的方法,可能会慢得惊人。如果对数据库写性能不满意,可以尝试设置innodb_flush_method
参数O_DIRECT
或O_DSYNC
.
默认频率06:00:00
默认启用自动关闭没有
默认情况下,InnoDB的日志缓冲区在每次事务提交时都被写到日志文件中,并对日志文件执行一个刷新到磁盘的操作,这强制了ACID的遵从性。在崩溃的情况下,如果您可以承受损失一秒钟的事务,您可以通过设置来获得更好的性能innodb_flush_log_at_trx_commit
变成0或2。如果将该值设置为2,则只有操作系统崩溃或电源中断才能删除事务的最后一秒。这在从服务器上非常有用,如果需要,一秒钟的数据丢失可以从主服务器上恢复。
默认频率06:00:00
默认启用自动关闭是的
这个建议器不能对MySQL 8或更高版本进行计算。
InnoDB支持压缩表(压缩
行格式)和更有效的BLOB处理(动态
行格式),但这两个特性都需要支持最新的文件格式(innodb_file_format =梭鱼
).这些特性还需要使用ROW_FORMAT =(动态|压缩)
在创建表
而且ALTER TABLE
语句。
有关更多信息,请参见定义表的行格式.
默认频率12:00:00
默认启用自动关闭没有
MyISAM使用表级锁定,当有许多并发时,这会对性能产生不利影响插入
而且选择
语句,因为插入
年代屏蔽所有选择
年代到插入
就完成了。但是,MyISAM可以配置为允许插入
而且选择
语句在某些情况下并发运行。
如果
concurrent_insert
设置为1,默认值,还是汽车
在MySQL 5.5.3或更高版本,MySQL允许插入
而且选择
语句并发地运行在数据文件中间没有空闲块的MyISAM表上。如果
concurrent_insert
设置为2,在MySQL 5.0.6及以上版本可用,或总是
从MySQL 5.5.3或更高版本开始,MySQL允许对所有MyISAM表进行并发插入,即使是那些有漏洞的表。对于有孔的表,如果表正在被另一个线程使用,则在表的末尾插入新行。否则,MySQL将获得一个普通的写锁并将行插入孔中。设置
concurrent_insert
到2允许表增长,即使中间有洞。这对于删除大块数据但继续发出大量数据的应用程序来说是不利的选择
,从而有效预防插入
S填洞。
默认频率06:00:00
默认启用自动关闭没有
在多次执行类似语句的应用程序中,预处理语句可以提高性能,主要是因为查询只解析一次。预处理语句还可以减少网络流量,因为只需为每次执行发送参数的数据,而不必发送整个语句。
然而,准备好的语句需要花费时间准备和消耗MySQL服务器中的内存,直到它们被关闭。
默认频率00:05:00
默认启用自动关闭没有
在多次执行类似语句的应用程序中,预处理语句可以提高性能,主要是因为查询只解析一次。预处理语句还可以减少网络流量,因为只需为每次执行发送参数的数据,而不必发送整个语句。
然而,准备语句需要花费时间准备和消耗MySQL服务器中的内存,直到它们被关闭,所以正确使用它们是很重要的。如果只执行一条语句几次,那么创建准备好的语句的开销可能就不值得了。
默认频率00:05:00
默认启用自动关闭没有
这个建议器不能对MySQL 8或更高版本进行计算。
启用查询缓存可以显著提高性能选择
跨多个连接执行相同的查询,返回相同的结果集。但是,如果用于查询缓存的内存过度碎片化,会对性能产生不利影响,导致服务器在从缓存中删除条目或在空闲块列表中搜索用于向缓存中插入新查询的块时暂停。
默认频率00:05:00
默认启用自动关闭没有
每个到MySQL数据库服务器的连接都在自己的线程中运行。线程的创建需要时间,所以服务器可以将线程保存在线程缓存中,稍后在新的连接中使用它,而不是在连接关闭时杀死线程。
默认频率00:05:00
默认启用自动关闭没有
的thread_pool_stall_limit
变量使线程池能够处理长时间运行的语句。如果允许一个长时间运行的语句阻塞一个线程组,那么分配给该线程组的所有其他连接都将被阻塞,并且在长时间运行的语句完成之前无法开始执行。在最坏的情况下,这可能需要几个小时甚至几天的时间。
的价值thread_pool_stall_limit
应选择这样的参数,即执行时间大于其值的语句将被视为暂停。停滞语句会产生大量额外的开销,因为它们涉及到额外的上下文切换,在某些情况下甚至是额外的线程创建。另一方面,设置thread_pool_stall_limit
参数设置过高意味着长时间运行的语句会阻塞一些短时间运行的语句。较短的等待值允许线程更快地启动。短的值也更好地避免死锁情况。长等待值对于包含长时间运行语句的工作负载很有用,可以避免在执行当前语句时启动太多新语句。
默认频率00:05:00
默认启用自动关闭没有