Code前端首页关于Code前端联系我们

设置mysql为内存数据库,如何设置mysql为内存数据库

terry 2年前 (2023-09-30) 阅读数 39 #Mysql
文章标签 Mysql

本文内容列表:

  • 1. MySQL内存使用率总是过高,需要立即执行这些操作...
  • 2、mysql如何分配内存?
  • 3、mysql内存数据库如何实现

MySQL内存使用率总是太高,必须立即执行这些操作...

在生产环境中,MySQL 不小心吃掉了所有内容,然后开始吃掉 SWAP。性能一次又一次下降。我应该怎么办?

可以从以下三点来排查原因:

MySQL使用内存有两种方式。

永久占用的内容

例如,Global Buffer 类别是在服务器启动时从操作系统中检索的,不会释放给任何其他进程。

动态请求内存

线程缓冲区由 MySQL 使用,是处理新查询时从操作系统请求的内存。执行查询后,该内存将被释放回操作系统。

这意味着MySQL的内存使用量是全局缓冲区加上线程缓冲区和允许的最大连接数。

对于专用数据库服务器,该值必须保持在服务器内存的 90% 以下。如果是共享服务器,则应保持在服务器内存的 50% 以下。

检查MySQL设置可以帮助确定内存使用情况并为MySQL分配适当的值。

近似公式:

当网站受到攻击时,有可能在短时间内建立异常多的连接。 MySQL 中的进程列表可用于检测顶级用户并阻止对滥用连接的访问​​。

找出查询执行时间较长的语句,因为这些查询需要服务器进一步优化以获得更好的性能,可以通过服务器查询日志来识别。由于查询率较低,更多的磁盘读取会导致更高的内存和CPU使用率,从而影响服务器性能。

最后,是时候添加内存模块了。即使在优化数据库设置后,服务器不断路由到使用交换内存,也必须增加内存。俗话说“好妇难为无米之炊”,就是这个意思。

上述这些方向都是可以在实际操作中得到验证和体会的。希望大家都能顺利前行,在数据库优化的道路上不断前行。

mysql如何分配内存

我们仍然使用两个会话,一个会话运行,用于运行主SQL;第二个会话ps,用于观察性能schema:

主会话的线程数为29,

性能schema中的统计数据Volume重置,

临时表的表大小限制取决于参数 tmp_table_size 和 max_heap_table_size 中较小的一个。在我们的实验中,以设置max_heap_table_size为例。

我们将会话级临时表大小设置为2M(小于上次实验中临时表使用的空间),使用临时表执行SQL:

查看内存分配记录:

你会发现内存分配略大于2M,我们假设临时表会比配置消耗略多,可以忽略。

查看该语句的特征值:

可以看到该语句使用了需要删除到磁盘的临时表。

那么这个临时表使用了多少磁盘空间呢?

我们在性能图表中打开与等待相关的统计元素:

重做实验并跳过它。

再次查看绩效表的统计值:

可以看到几个现象:

1。 7.92 MB 的数据被写入临时表空间。

2。这些数据是在语句写入后慢慢地、逐渐地写入的。

我们来看看这些写操作的属性。这个方法我们在实验03中使用过:

可以看到写入线程是page_clean_thread,是一个脏操作,这样就可以理解为什么数据写入速度慢了。

还可以看到每次IO操作的大小是16K,也就是清除数据页的操作。

结论:

我们可以看到

1。 MySQL 最初将遵循 max_heap_table_size 设置。当内存不够时,表会直接转移到磁盘存储。

2。由于引擎不同(内存表引擎为heap,磁盘表引擎遵循internal_tmp_disk_storage_engine的配置),本实验写入磁盘的数据量与实验05中内存使用的数据量不同。

3、如果临时表使用磁盘,并且表引擎配置为InnoDB,那么即使临时表在短期SQL中使用,使用后释放,释放后脏页也会被刷新到磁盘,消耗一些IO。

如何实现mysql内存数据库

它是一个表引擎,称为内存表。您可以在创建新表时选择它,也可以修改现有表

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门