mysql服务器每秒可以运行几个选择?


19

我正在写一个商业计划,当我的网站将由50万唯一访问者访问时,我必须模拟成本。

  • 参观者:500.000
  • 网页浏览量:1,500,000
  • 蜘蛛综合浏览量:500,000
  • 总浏览量:2,000,000

每页执行50个查询+-

  • 每天查询量:一亿
  • 每小时:400万
  • 每分钟:70,000
  • 每秒:1,200
  • 高峰:3,000

进行此计算后,我每秒需要3,000个查询...什么样的服务器可以处理它?

问题是:实际上我的网站每天进行2,000次访问,并且每秒有-+ 150/200次查询...从这一点开始,我希望每秒有50,000次查询。

我在群集或复制中需要多少台服务器来管理这项工作?


5
8k +查询访问哪种网站?
伊格纳西奥·巴斯克斯

5
您需要立即进行系统设计审查。
斩波器

1
没有足够的信息,因为您没有告诉我们真正重要的部分—查询本身。无需告诉我们您正在运行的机器。这是486吗?最新最好的超级计算机还是介于两者之间的计算机?您列出的所有这些数字都与问题无关。请提供相关信息。
约翰·加迪尼尔

> 8k +查询访问哪种网站?我接待了2000位唯一身份的访问者,但每个访问者都会打开许多​​页面,+我里面有很多蜘蛛。2000个唯一用户正在生成6000个唯一ip,每天打开超过120.000页。感谢

Answers:


22

我曾经在一家电子商务公司工作,该公司的网站每天点击量达数百万。我们只有一个DELL PE 1750,带有2个单核CPU和2GB的RAM,数据库大小约为1GB。4GB。在高峰时间,该服务器每秒最多处理5万多个查询。

话虽这么说:数据库结构良好,所有查询都经过了微调(我们每周进行一次会议,分析慢速查询日志并修复查询和索引),并且服务器设置也得到了微调。缓存绝对是个好主意,但是MySQL还是这样做的,您只需要分析性能,然后微调内存的使用方式(查询缓存与其他选项)。

从那次经验中,我可以告诉您,最大的影响是由于缺少索引,错误的索引和错误的数据库设计(例如,长字符串字段作为主键和类似的废话)引起的。


8

这完全取决于查询的复杂程度,服务器具有的内存量以及磁盘的速度。

如果查询非常简单或调整得很好,则单个大型数据库服务器可以处理该查询。但是,如果查询非常复杂(或简单但调优),那么您将需要多个服务器。


还是某些严重的架构更改和重新索引...
Massimo 2010年

3
与添加更多硬件相比,始终首选进行调整。增加更多的硬件只会掩盖问题,直到问题很难解决为止。
mrdenny

感谢您的回答,所以我认为2台并行服务器+ 1台被动冗余服务器可以吗?我说的是带有32 g内存和快速驱动器的2x四核服务器。我对吗?记住我需要表演!

1
一切都进行了很好的调整和索引,无论如何,我每周都会编写1或2个慢查询(慢查询时间仅为2秒),我正在编写一个业务计划,并且我想知道什么样的服务器池可以管理每天打开的12,000,000页,每天产生8000个查询/秒

每秒8000个查询并不多。一台16核服务器可能会解决问题。64 GB的RAM(或多或少取决于数据库的大小以及在任何时候都需要在缓存中保留多少数据)应该可以解决问题。我的数据库(已授予其SQL Server)在16核64 Gig RAM服务器上为1 TB,每天有40-50k用户每天每分钟几次访问该数据库。
mrdenny

3

在不了解有关您正在运行的特定查询,数据库方案及其大小的情况下,这确实是无法估计的。

在索引列上进行简单的SELECT与基于非索引列的几个JOIN 完全不同……并且,如果所涉及的表包含1K记录或1M,当然情况会发生很大变化。

也:

  • 您当前的硬件配置是什么?
  • 您的服务器在当前负载下使用了多少电量(CPU,RAM,磁盘I / O)?

实际上,我有一台具有2x四核和8 GB内存的服务器。我正在使用完整的ram和100%的处理器(看来我可以使用800%,请参阅此处:)cpu:img834.imageshack.us/img834/3483/downloadv.png ram:img442.imageshack.us/i/ download2p.png磁盘:img213.imageshack.us/i/download1x.png 谢谢

根据这些图,您仅使用一个(或最多两个)CPU内核;因此,您的应用程序绝对不是CPU限制的……或者是,但是,它无法利用多个CPU。另外,任何人都不是真正需要用于“缓存”的所有内存,只是操作系统在利用它,因为“在那儿”。
Massimo

我如何找到有关使用所有CPU内核的信息?我正在使用灯...

首先,您应该检查是否不使用它们,因为它们根本没有需要(=低负载),操作无法正确并行化,或者您的MySQL和/或Apache未配置为使用它们。而且,由于默认情况下这两个程序通常是多线程的,所以我来看看您的服务器负载和SQL查询...
Massimo 2010年

3

正如Ignacio所说,您可能希望研究缓存。在cms甚至堆栈的前面。每个(每个!)页面的查询超过50个,确实很多。


是的,这是一个复杂的网站,是一个社区,我无法缓存任何内容,它每秒都在变化。我试图缓存页面,但是缓存命中率几乎为0,因为每次我缓存页面时,它都永远无法再次读取,或者可以在再次打开之前进行更改。感谢

4
难以到达的地点很少;如果它仅每秒变化一次,您仍然可以缓存一整秒,例如10次浏览;-)您是否考虑过不完全缓存页面,而是考虑块或特定值等?您可以在数据库外部,共享内存段,文件系统,memcached上进行缓存。同样,通常在这种情况下ESI可能会有用
Joris

0

从您的评论来看,最大的因素将是您的数据集大小,或者至少是“热门”数据集的大小。只要16核服务器上的3,000qps甚至8,000qps根本不是问题,只要服务器很少需要进入磁盘来满足查询即可。一旦活动数据集超过InnoDB用来缓存它的内存量,您的性能就会迅速下降。


0

对于大型“热”数据集,这是他们的目的,可能值得在时间上进行投资以转换为“大数据”方案。例如,如果您要检索大量数据,但是您从不重写,而仅追加新数据,请查看Apache Hive。浏览一下它们,它们通常是一种可以轻松地与现有代码交互的风格,这也可以防止由于缓存空间不足而引起的烧心。


0

有太多事情可以每秒影响您的查询,请不要在未经测试的情况下信任我的数据。我在这里发布速度测试结果以帮助某人估计当前(2018-09)mysql数据库和计算机的qps。在我的测试中,数据大小小于服务器内存(这大大减少了IO并大大提高了性能)。

我使用一个cpu 3.75GB内存,100GB ssd,gcp云mysql服务器实例并获得:

  • 1个客户端,一个sql一行读取:799 sql / second。
  • 50个客户端,一个sql一行读取:6403 sql / second。
  • 50个客户端,一个sql一行写入:写入4341行,qps。4341 SQL /秒
  • 1个客户端,每个sql 30k行写入:92109个写入行/秒。

写入qps测试结果(2018-11)gcp mysql 2cpu 7.5GB内存150GB ssd序列化写入10个线程,每个sql写入30k行,7.07.0GB表,数据密钥长度为45个字节,值长度为9个字节,获得154KB写入行每秒,CPU 97.1%在gcp控制台中写入qps 1406 / s。
青铜人
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.