【问题标题】:MySQL - Are memory table queries slowing down other queriesMySQL - 内存表查询是否会减慢其他查询
【发布时间】:2015-09-01 09:23:00
【问题描述】:

我计划通过对每分钟 ip 设置一些限制来限制来自请求的“主表”(innodb)查询。我的想法是创建包含 ip、日期时间和请求类型的 mysql 表。问题是当有人会尝试蛮力并且限制表会阻止他的行动。对内存表的大量查询会杀死 innodb 表中的其余查询吗?

如果是,我怎样才能最大限度地提高主数据库的容量,并有可能限制来自特定 IP 的特定类型的请求每分钟特定次数?

【问题讨论】:

  • “每分钟”对我来说似乎很慢。 MySQL 能够提供更快的吞吐量。是什么让您认为这种设计是必要的?我敢打赌,对于正确设计和索引的架构来说,您对“大规模”的想法不是问题。
  • @duffymo 我想限制一些操作,以防止暴力强制登录(每分钟 10 次尝试)、垃圾邮件注册(每小时 1 次)或通过一些复杂查询过于频繁地请求某些数据(一切都通过 ip)。
  • 数据库不应该这样做;您的中间层需要执行它。我仍然说您低估了数据库和查询优化器。在经过衡量的反应告诉我有必要之前,我不会采取这样的步骤。
  • @duffymo 你说得对,但我仍然需要防止暴力登录或垃圾邮件注册。即使忽略性能,这也是安全问题。
  • 不,不是。计算中间层的重试次数并在达到限制时拒绝访问。这与您提出的过于复杂的解决方案完全不同。

标签: php mysql memory


【解决方案1】:

对内存表的大量查询会杀死其余的 在 innodb 表中查询?

  • 不!它肯定不会杀死查询。但您应该记住几件事。
  • 内存表会随着新数据的进入而增长,并且会占用系统 RAM 中的空间。
  • 这不会损害您的 innodb,因为缓冲池是在 mysql 启动时分配的
  • 如果系统由于内存表的增长(消耗所有内存)而达到最大内存,这将是有害的!然后你会看到 mysql 被内核提到“内存不足”错误杀死。

如果是,我怎样才能最大化主数据库的容量? 限制来自特定 IP 的特定类型请求的可能性 分钟?

  • 因此答案是否定的,但您仍然可以创建限制使用资源的用户。
  • 查看this link 以创建具有此类限制的用户。

【讨论】:

  • 很好的答案!非常感谢。考虑添加一些信息,我如何限制表的大小并通过某个键删除旧行以便为新行腾出位置。我应该在插入之前使用触发器吗?
猜你喜欢
  • 2013-06-18
  • 2016-11-23
  • 2012-06-11
  • 1970-01-01
  • 1970-01-01
  • 2019-09-01
  • 2019-11-22
  • 1970-01-01
  • 2021-02-13
相关资源
最近更新 更多