首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确定何时缩放是必要的或有帮助的?

问如何确定何时缩放是必要的或有帮助的?
EN

Database Administration用户
提问于 2013-08-01 00:43:31
回答 1查看 235关注 0票数 2

我有一个MySQL服务器,用于在线游戏的后端存储。游戏写入数据库,保存世界位置、健康状况、能力统计等字符信息。每个字符和车辆每隔几秒钟就会将这些数据写入数据库。我已经注意到,随着越来越多的用户加入到这个游戏中,我通过数据库编写的查询看起来更慢了。此外,随着我通过数据库添加的内容使网络世界变得更加复杂,游戏速度趋于缓慢。

我正在寻找瓶颈,我想知道如何确定我的数据库缩放(垂直或水平)是否会产生影响。知道数据库是MySQL,我如何着手查看我的单个数据库服务器是否是瓶颈,以及扩展它是否会有帮助?谢谢。

EN

回答 1

Database Administration用户

发布于 2013-08-01 03:44:52

如果在添加更多数据时,情况正在放缓,那么很可能是缺少索引。如果您有一个没有索引的查询表,那么服务器将需要执行一个完整的表扫描(例如。读整张桌子)。

要理解为什么要慢得多,请阅读关于大O符号的文章。全表扫描是O(n),对于大数据集来说非常慢。索引扫描将是O(log(n))。与n=1M行相比,对于O(log(n))一个1,线性操作需要读取1M行和大约20行。

如果您知道应用程序中正在执行的所有SQL,您可以跳到这个答案的解释部分。

如果您不知道是什么SQL导致了缓慢,那么您需要统计数据来确定它。您的问题中没有关于您正在运行的技术堆栈的信息,但是如果您使用的是ORM框架,那么您可能能够在那里启用查询状态。

您还可以考虑启用MySQL慢速查询日志。一旦启用,MySQL服务器将跟踪执行时间超过预定义的时间的SQL命令(默认为0秒,例如。一切)。

一旦确定了缓慢的SQL,就应该在其上运行一个解释来查看查询计划。在此基础上,可以向通过全表扫描访问的相关表添加其他索引。

如果在添加索引之后,由于负载过多,事情仍然很慢,那么您可以考虑扩展到更大的服务器或集群设置。但是,在您优化SQL之前,它是没有意义的,因为在集群设置中,相同的慢操作将同样慢(您可能能够同时支持更多的这些操作)。

1:这些数字不完全正确。要查看的真正统计数据是所涉及的磁盘I/O的数量。对于完整的表扫描,磁盘I/O的数目是行数除以一个磁盘块(通常为4KB)的数目,因此它将小于1M I/O,尽管仍然是O(n),因为它将与行数线性增长。而且,大多数数据库服务器都使用B-树作为索引的高扇出(~100 vs2用于二叉树),因此磁盘I/O的数量将大大减少(树的4-5级是常见的)。同样,它仍然是O( log (n)),尽管日志是基100而不是2。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/47386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档