В СУБД PostgreSQL присутствует эффект раздувания таблиц aka table bloat. Он выражается в падении производительности при интенсивном обновлении данных, например, при частых UPDATE, INSERT, DELETE. Данное поведение характерно и для СУБД vPostgres в VMware VCSA.
Для диагностики раздувания необходимо выполнить следующие действия:
- Скачать скрипт 51981_check_bloat.sql из БЗ VCSA database storage /storage/db is full or nearly full (51981) (скрипт является копией официального Show database bloat).
- Подключиться к БД: /opt/vmware/vpostgres/current/bin/psql -U postgres -d VCDB.
- Скопировать и вставить содержимое файла и нажать Enter.
- Проанализировать отчёт. Если значение колонок tbloat либо ibloat column больше 25, то запланировать обслуживание БД.
Пример вывода (обратите внимание на запись vci_task_stats, где tbloat==43.5):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
current_database | schemaname | tablename | tbloat | wastedbytes | iname | ibloat | wastedibytes ------------------+------------+--------------------------------+--------+-------------+------------------------------------------------+--------+-------------- VCDB | vc | vpx_proc_log | 1.4 | 21102592 | vpxi_proc_log_name | 0.5 | 0 VCDB | vc | vpx_proc_log | 1.4 | 21102592 | pk_vpx_proc_log | 0.4 | 0 VCDB | vc | vpx_task | 4.5 | 5414912 | vpxi_task_computeresource_id | 0.7 | 0 VCDB | vc | vpx_task | 4.5 | 5414912 | vpxi_task_datacenter_id | 0.7 | 0 VCDB | vc | vpx_task | 4.5 | 5414912 | vpxi_task_scheduledtask_id | 2.5 | 24576 VCDB | vc | vpx_task | 4.5 | 5414912 | vpxi_task_alarm_id | 0.0 | 8192 VCDB | vc | vpx_task | 4.5 | 5414912 | vpxi_task_complete_state | 0.4 | 0 VCDB | vc | vpx_task | 4.5 | 5414912 | vpxi_task_entity_id | 0.6 | 0 VCDB | vc | vpx_task | 4.5 | 5414912 | vpxi_task_folder_id | 0.0 | 8192 VCDB | vc | vpx_task | 4.5 | 5414912 | vpxi_task_host_id | 0.7 | 0 VCDB | vc | vpx_task | 4.5 | 5414912 | vpxi_task_queue_time | 0.7 | 0 VCDB | vc | vpx_task | 4.5 | 5414912 | vpxi_task_resourcepool_id | 0.0 | 8192 VCDB | vc | vpx_task | 4.5 | 5414912 | vpxi_task_complete_time | 0.5 | 0 VCDB | vc | vpx_task | 4.5 | 5414912 | vpxi_task_vm_id | 0.6 | 0 VCDB | vc | vpx_task | 4.5 | 5414912 | vpx_task_f1 | 0.6 | 0 VCDB | vc | vpx_task | 4.5 | 5414912 | vpxi_root_task_id | 0.7 | 0 VCDB | vc | vpx_task | 4.5 | 5414912 | pk_vpx_task | 0.4 | 0 VCDB | vc | vpx_task | 4.5 | 5414912 | vpxi_change_tag_id | 0.7 | 0 VCDB | vc | vpx_task | 4.5 | 5414912 | vpxi_parent_task_id | 0.7 | 0 VCDB | vc | vpx_task | 4.5 | 5414912 | vpxi_task_start_time | 0.9 | 0 VCDB | vc | vpx_task | 4.5 | 5414912 | vpxi_task_username | 1.4 | 319488 VCDB | vumdbc | vci_task_stats | 43.5 | 696320 | pk_vci_task_stats | 7.0 | 98304 VCDB | vc | vpx_topn_past_week | 1.4 | 655360 | pk_vpx_topn_past_week | 2.6 | 1605632 |
Для оптимизация таблиц и ликвидации раздувания необходимо выполнить следующие действия:
- Остановить сервисы:
service-control –stop –all - Запустить vpostgres:
service-control –start vmware-vpostgres - Подключиться к БД:
/opt/vmware/vpostgres/current/bin/psql -U postgres -d VCDB - Перестроить таблицы и индексы для ликвидации раздувания:
vacuum full; - Собрать новую статистику для планировщика в целях получения оптимальной производительности:
vacuum analyze; - Для выхода ввести:
\q - Запустить сервисы:
service-control –start –all
После оптимизации в записи vci_task_stats наблюдаем tbloat== 1.0.