经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 其他 » 职业生涯 » 查看文章
【故障公告】今年第五次:数据库服务器 CPU 100% 团队
来源:cnblogs  作者:博客园团队  时间:2023/9/9 10:42:28  对本文有异议

会员救园,故障添乱,今天凌晨 04:06~05:40 期间,园子的数据服务器再次出现 CPU 100% 故障,由此给您带来麻烦,请您谅解。

这是今年的第5次故障,第1次发生于2023年3月26日,第2次发生于2023年8月19日,第3次与第4次发生于2023年8月31日。

这次由于出现在凌晨,发现比较晚,发现故障后,通过重启数据库实例恢复正常。

园子的数据库服务器使用的是阿里云 RDS SQL Server2016 标准版,故障恢复后,我们通过阿里云 RDS 控制台的「性能优化」发现故障期间占用 CPU 最多的 SQL 语句

  1. SELECT TOP @__p_1 [b].[TagName] AS [Name], [b].[TagID] AS [Id], [b].[UseCount], [b].[PrivateUseCount], [b].[BlogId]
  2. , [b].[Order]
  3. FROM [blog_Tag] [b]
  4. WHERE [b].[BlogId] = @__blogId_0
  5. AND ([b].[PrivateUseCount] > ?
  6. OR [b].[UseCount] > ?)
  7. ORDER BY CASE
  8. WHEN [b].[Order] IS NULL THEN ?
  9. ELSE ?
  10. END, [b].[Order], [b].[UseCount] DESC

阿里云 RDS 控制台给出的分析提示:

数据类型隐式转化:可能会导致CPU / IOPS飙高,建议保持数据类型一致

我们针对这个 SQL 语句进行了优化,改为在内存中针对 Order 字段进行排序,优化的 SQL 语句

  1. SELECT TOP(@__p_1) [b].[TagName] AS [Name], [b].[TagID] AS [Id], [b].[UseCount], [b].[PrivateUseCount], [b].[BlogId], [b].[Order]
  2. FROM [blog_Tag] AS [b]
  3. WHERE [b].[BlogId] = @__blogId_0 AND ([b].[PrivateUseCount] > 0 OR [b].[UseCount] > 0)
  4. ORDER BY [b].[UseCount] DESC

注:SQL 语句是 EF Core 生成,我们优化的是 LINQ 代码。

前两次故障期间占用 CPU 最多的是一个存储过程,在故障后的优化中给那个存储过程加了 WITH RECOMPILE 参数,这次故障期间没有出现 CPU 占用高的问题。

原文链接:https://www.cnblogs.com/cmt/p/17683844.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号