暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

KCP 模拟题练习 10 - 体系结构内存参数 maintenance_work_mem

原创 Lucifer三思而后行 2024-10-08
104

【单选题】在 KingbaseES V8 中,VACUUM 和 CREATE INDEX 所使用的内存数量是由哪个参数控制的?

  • shared_buffers
  • work_mem
  • maintenance_work_mem
  • temp_buffers

解题思路:

1、shared_buffers

原理:数据库服务器使用的共享内存缓冲区的数量,主要用于缓存数据,根据需求一般不能设置超过 80% 的内存,但至少是20%。比如 32g 内存测性能,一般可以设置 shared_buffers 22~25g。

应用范围:数据库本身,查询的数据量比较大,比较频繁使用到。

2、work_mem

原理:内部排序和哈希操作可使用的工作内存大小。该内存是在开始使用临时磁盘文件之前使用的内存数目。

应用范围:数据比较多大的情况,主要排序的数据有关系,排序数据越大,设置的就越大,比如 16g 内存,tpch 测试,单用户 10g 规模数据,设置 2g 的 work_mem。数值以 kB 为单位的,缺省是 1024(1MB),比如 tpcc1000warehouse,并发 50 个,设置 20mb 即可。

对于复杂的查询,可能会同时并发运行好几个排序或者哈希操作,每个都会使用这个参数声明的这么多内存,然后才会开始求助于临时文件。同样,好几个正在运行的会话可能会同时进行排序操作。因此使用的总内存可能是 work_mem 的好几倍。ORDER BY,DISTINCT 和 mergejoin都要用到排序操作,而哈希操作在哈希连接、哈希聚集和以哈希为基础的 IN 子查询处理中都会用到。

3、maintenance_work_mem

指定在维护性操作(例如 VACUUM、CREATE INDEX 和 ALTER TABLE ADD FOREIGN KEY)中使用的最大的内存量。其默认值是 64 兆字节(64MB)。因为在一个数据库会话中,一个时刻只有一个这样的操作可以被执行,并且一个数据库安装通常不会有太多这样的操作并发执行, 把这个数值设置得比 work_mem 大很多是安全的。 更大的设置可以改进清理和恢复数据库转储的性能。

注意当自动清理运行时,可能会分配最多达这个内存的 autovacuum_max_workers 倍,因此要小心不要把该默认值设置得太高。 通过独立地设置 autovacuum_work_mem 可能会对控制这种情况 有所帮助。

4、temp_buffers

设置每个数据库会话使用的临时缓冲区的最大数目。这些都是会话的本地缓冲区,只用于访问临时表。默认是 8 兆字节(8MB)。这个设置可以在独立的会话内部被改变,但是只有在会话第一次使用临时表之前才能改变; 在会话中随后企图改变该值是无效的。

一个会话将按照temp_buffers给出的限制根据需要分配临时缓冲区。如果在一个并不需要大量临时缓冲区的会话里设置一个大的数值, 其开销只是一个缓冲区描述符,或者说temp_buffers每增加一则增加大概 64 字节。不过,如果一个缓冲区被实际使用,那么它就会额外消耗 8192 字节(或者BLCKSZ字节)。

最后修改时间:2024-10-12 11:10:04
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论