首先我要感谢大家参加我的11月16日,2021年研讨会”MySQL DevOps的性能”。记录和幻灯片上可用网络研讨会页面。
这里有答案的提问参与者,我无法提供在网络研讨会。
问:这就跟你问声好!我们有麻烦删除查询。我们必须定期删除一些数据(比如,每小时、每天),我们有短期服务器摊位在这些删除。服务器上运行现代NVMe的所以我们不知道为什么我们会有这种情况。那些删除的不是如此之大,就像10 000 - 15 000条记录,但表删除执行更新频繁。
答:我将测试如果类似的删除声明是缓慢的,当你开发服务器上运行它在一个孤立的环境中虽然没有其他会话连接到MySQL服务器实例。如果它是缓慢的,在这种情况下,检查是否MySQL使用索引来解决条件在哪里为删除声明。您可以使用解释声明为删除或将删除成一个类似的选择查询和实验。
如果删除语句运行快速调用时在孤立的环境中,检查并行会话如何影响其性能。如果你删除的表更新频繁,删除语句可以通过锁定冲突原因和影响。解决这种情况下研究MySQL使用锁。伟大的演讲关于InnoDB锁InnoDB锁定解释说:“简笔画”可以发现https://www.slideshare.net/billkarwin/innodb-locking-explained-with-stick-figures然后你需要优化删除和更新语句,所以他们完成得更快。或者,你可以把它们分开,所以他们有更少的相互影响。你也可以把删除语句,所以他们每次更新较少的记录。
问:问题2。我们有innodb_buffer_size设置大约260 gb的专用服务器约320 gb的RAM。不过,我们有99.9%的内存和没有其他大内存的消费者,只有MySQL (Percona 8.0.23)。雷竞技下载官网服务器启动和周围3小时需要所有可用的内存不管innodb_buffer_size设置。我们从来没有这样为5.7。你有什么好主意吗?
答:MySQL使用内存不仅为InnoDB的缓冲池,但其他数据,如基于会话和行动,缓冲区。例如,如果你有100个连接,使用底层临时表来解决查询和内部临时表的大小设置为100 mb您将使用大约10 g这些表的额外的内存。查询内存消化性能表模式在这些表和视图sys模式发现的操作在你的MySQL服务器分配内存。
问:我们可以拿到一份这个演讲吗?
答:你应该收到一份幻灯片。如果你没有,他们附在这篇博客:DevOps_Perf_202111
问:buffer_pool_size应该主机内存的百分比是多少?
答:主机内存的百分比是一个非常理想的估算你需要分配的内存数量InnoDB的缓冲池。例如,过去的MySQL用户手册的建议有InnoDB缓冲池大小多达80%的可用的RAM。但80%的RAM如果主人非常不同,说,8 g或1024克。在前一种情况中,有80%是6.4 g和主机将会为其他MySQL 1.6 g缓冲区的操作系统可能是不够的。在后一种情况下,80%是819.2 g和主机将会为其他需要204.8克。根据您的工作负载可能是一个巨大的资源浪费。我建议你读这篇文章:https://www.雷竞技下载官网percona.com/blog/2015/06/02/80-ram-tune-innodb_buffer_pool_size/跟最后的链接,然后选择大小,适合您的数据集和工作负载。
问:我们可以拟合RAM大小和数据大小如何?
例子:如果我有1 g的数据,我需要多少RAM得到100每秒,如果我有100 g的数据我需要得到100每秒多少内存?
答:RAM的大小,数据集大小和数量的查询,您的服务器每秒可以处理并不直接相关。你需要测试您的查询和跟踪执行。举个例子,如果你选择从InnoDB表和表拥有1 g或100 g的数据,和你不访问其他服务器上的表,第一次运行后将低于因为InnoDB将数据读入缓冲池。然后性能和每秒查询的数量是有限的,只有您的客户端和服务器之间的网络速度和带宽有你可以分配约100 g的缓冲池。但缓存的大小将保持几乎一样的表大小不管你有多少联系。你的MySQL服务器将只使用少量的内存缓冲区新连接。
然而在另一个案例中,你可能有一个相对小的表,你将获得一个相当复杂的查询。例如,如果您试图重复仍然有效的测试用例https://bugs.mysql.com/bug.php?id=29423184表,一个查询会比你想象的更长的时间。在这种情况下,每秒查询的数目也将非常低。
问:你有推荐的参数列表MySQL RDS AWS吗?
答:这对专用MySQL服务器是一样的但是你可能无法改变的一些选项。
问:如果你知道你有SSD,但轮值表= 1,必须配置为使用SSD吗?
答:SSD轮值表应该是0。如果你确定你有ssd但它们显示为旋转磁盘这意味着您的存储配置不正确。取决于你的配置可能仍然有相同的性能,如果磁盘被正确识别。如果不是这种情况,检查你的存储、磁盘阵列控制器和系统配置。
MySQL只是发送系统命令为阅读,写作,和同步数据。它不介意磁盘是否转动。MySQL轮值表的性能价值其实并不重要。
问:如果你认为你调谐性能最佳的主人和奴隶,但是秒背后的主人继续增长,你决定把碎片,但xtrabackup失败日志包装。但即使你得到一个好的备份,一旦在网上,奴隶永远不会赶上。小林丸,一种毫无胜算的局面,你去过那里吗?你做什么了?
答:首先确保如果你配置一个多线程的复制品。如果你使用平行的类型LOGICAL_CLOCK,研究选择binlog_transaction_dependency_tracking。当设置为实际上它是如何工作的WRITESET或WRITESET_SESSION。为避免日志备份期间包装增加重做日志文件的大小。如果你能停止源服务器,停止它,建立副本通过复制datadir:它比使用XtraBackup更快,因为你不需要复制的变化在运行备份时重做日志文件。
问:在MySQL 5.7中,tmp现在InnoDB表空间,如何优化tmp利用RAM而不是使用磁盘?
答:表空间文件在磁盘上使用只有当内存中的表转换为基于磁盘的表。否则,继续使用内存临时表。
问:顶部是什么6变量来获得最佳性能,如何验证如何有效设置,看看全球地位,你什么时候可以知道当这些变量可以得到最好的利用增加cpu /内存/磁盘/网络。
答:当我显示变量可以在大多数情况下我提高性能“结论”幻灯片我建议你从你正试图解决问题并开始调整变量只有当你明白你在做什么。
一些这样的变量可以度量的有效性。例如,如果自由的输出缓冲区的数量显示引擎INNODB状态很小,缓冲池命中率表明磁盘访问的数量始终大于缓冲池的数量,它表明,缓冲池大小可能太小,你的工作量和数据。
关于CPU,如果活动线程的数量高,和你看到的性能下降时并发增加操作系统显示CPU使用率较低,这可能是一个症状:
——你有限的上限引擎的活动线程的数量
——磁盘不支持并行操作和活动线程正在等待IO
CPU性能的另一个问题可能发生如果活动引擎线程的数量的上限没有设置或过高,线程是花时间无所事事优先队列中等待。
唯一的选择,直接限制了IO活动innod_io_capacity限制的速度背景InnoDB操作。如果设置过低InnoDB可能未充分利用你的快速磁盘,如果设置太高InnoDB会开始写得太快,所以每个写请求将浪费时间等待队列。
问:是什么最后InnoDB设置,一个应该没有的CPU核?
答:这是innodb_thread_concurrency限制InnoDB线程的数量,可以并行运行。您应该将其设置为0或CPU核的数量。
问:哪个更安全、更快的社区MySQL或Percona MySQL或aws rds吗?雷竞技下载官网
答:雷竞技下载官网Percona MySQL具有性能、诊断的改进,以及企业级特性,可作为开源的。AWS RDS支持硬件扩展在需求和物理复制使用InnoDB重做日志文件,而不是二进制日志。但是,它不允许你有相同的控制在服务器上为自己的物理实例。MySQL社区工作在更高的平台上,因此使用函数调用,所有他们工作Percona MySQL或AWS RDS可能使用优化的变体。雷竞技下载官网所以他们每个人都有自己的优点和缺点。
问:以防张开表> > > open_files(并不能改变open_files)如何设置table_open_cache吗?“尽可能大”?
答:状态变量Open_files是“打开的文件的数量。这个计数包括常规文件打开服务器。它不包括其他类型的文件,如插座或管道。同时,数不包括文件存储引擎开放使用他们自己的内部函数而不是要求服务器级别。”(https://dev.mysql.com/doc/refman/8.0/en/server-status-variables.html statvar_Open_files)状态变量Open_tables是“开放的数量表”。他们彼此不相关。你需要手表的价值Opened_tables(“表的数量已经打开了”)不大于Open_tables。
有一个操作系统选项“打开文件”,如果你运行该命令是可见的ulimit- - - - - -n。这个选项应该大于文件的最大数量,您的MySQL实例可以同时打开。谈到Open_tables:你不能有这个值设置为一个大于操作系统选项“打开文件”,除非你的表存储在共享或一般的表空间。
问:如何判断我们应该调整join_buffer_size ?等事件的任何地方吗?
答:如果你使用加入不使用索引的查询,他们因为这个执行缓慢。从常规使用慢速查询日志查询调优,性能模式和查询分析器PMM找到需要优化的查询。在查询分析器中添加一列“加入”查询列表。在性能模式搜索语句的值SELECT_FULL_JOIN大于0的吗events_statements_ *表。
检查我的“介绍MySQL查询调优Dev (Op)年代”网络研讨会。
问:如何衡量table_open_cache内存消耗?15 k /表?FRM-related吗?一些方法来估计?
答:这是事件”内存/sql/TABLE_SHARE: mem_root“检查这个博客。
问:你好家伙!
我们需要准备不同的优化取决于MySQL引擎例如XtraDB, InnoDB吗?如果是,请解释差异呢?
最好的问候,
奥列格•史堤玛
答:XtraDB是一个增强版的InnoDB Percona服务器:雷竞技下载官网https://www.雷竞技下载官网percona.com/doc/percona-server/8.0/percona_xtradb.html。所以差异在Percona服务器添加特性。雷竞技下载官网即选项Percona服务器中存在和不存在上游社区MySQL。雷竞技下载官网
问:关于线程。做的更好使用超线程、多线程MySQL实例或我们需要关掉这个功能吗?
最好的问候,
奥列格•史堤玛
答:你不需要关闭这个选项但你可能看到MySQL性能不是线性可预测的高并发工作负载。我建议你检查这个博客与超基准在MySQL和评论上更好的理解超线程如何影响MySQL的性能。
问:除了设置os swap-pines正确。也推荐?使memlock在my . cnf中所做
答:通常你不需要它。





