数据库操作期间的 CPU 峰值

数据库上的查询负载可能成为一个瓶颈,并蔓延到整个部署中,最终不仅会降低 Cinder 服务的性能,还会降低整个 OpenStack 部署的性能。

通常,根据负载、查询模式、周期性任务等,可能需要额外的索引来帮助为数据库提供提示,以便它能够最有效地尝试减少需要检查的行数,从而返回结果集。

添加索引

在 2023.1 (Antelope) 之前的旧版本中,存在一些表在大量已删除资源(卷、快照、备份等)存在的情况下性能较差,导致在列出这些资源以及对这些资源执行某些操作时,数据库服务器的 CPU 负载很高。通过向这些表添加适当的索引解决了这个问题。

以下示例是针对 MariaDB/MySQL 的,但语法应该易于修改,供使用 PostgreSQL 的操作员使用,它代表了旧版本可以添加的更改,以解决这些数据库服务器 CPU 峰值,而不会与 Cinder 在 2023.1 (Antelope) 中引入的更改冲突。

use cinder;
create index groups_deleted_project_id_idx on groups (deleted, project_id);
create index group_snapshots_deleted_project_id_idx on groups (deleted, project_id);
create index volumes_deleted_project_id_idx on volumes (deleted, project_id);
create index volumes_deleted_host_idx on volumes (deleted, host);
create index snapshots_deleted_project_id_idx on snapshots (deleted, project_id);
create index backups_deleted_project_id_idx on backups (deleted, project_id);