- 论坛徽章:
- 0
|
概念
VMware\'s vCenter Server的数据库被用来保存关于VCenter活动的数据,在vCenter中,保存着大量关于资源、集群、DRS、快照、VMware ESX主机、虚机、警告、性能统计、任务和事件等数据表。
问题在于如果有很多VM、ESX主机的话,数据库会增长得非常快,事件、任务和统计数据是数据库增长的主要部分,删除这些过时的信息能够节省数据库空间,对系统性能、数据库性能也有提高作用。我们以Oracle为例,看看如何清除这些数据。
我们先看看相关的数据表。
VPX_TASK,任务(task)信息,这张表保存着所有的VCenter Server曾经有过的任务信息。
VPX_EVENT ,VPX_EVENT_ARG事件(Event)信息,这张表包含着所有事件信息,每个事件在VPX_EVENT表中有一条记录,每条记录,而这里面的记录又与VPX_EVENT_ARG表一一对应或者一对多对应,在数据库里他们用EVENT_ID列来关联(VPX_EVENT和VPX_EVENT_ARG都有EVENT_ID列)
VPX_HIST_STAT (VC 2.0.x)
VPX_HIST_STAT1 (VC 2.5)
VPX_HIST_STAT2 (VC 2.5)
VPX_HIST_STAT3 (VC 2.5)
VPX_HIST_STAT4 (VC 2.5)
VPX_SAMPLE_TIME1 (VC 2.5)
VPX_SAMPLE_TIME3 (VC 2.5)
VPX_SAMPLE_TIME3 (VC 2.5)
VPX_SAMPLE_TIME4 (VC 2.5)
历史统计,这些表包含着各种关于主机和虚机的统计信息,在 vCenter Server 2.0.x中,这些信息在表VPX_HIST_STAT中,在vCenter Server 2.5上,改用了多个表,其中:日统计信息在表VPX_HIST_STAT1中,周统计信息在表VPX_HIST_STAT2中(由日表累计而来),月统计信息在VPX_HIST_STAT3中(由周表累计而来),年表VPX_HIST_STAT4由月表累计而来,此外还有四个取样时间表。
其实通过修改统计间隔也可以清除一些统计数据,比如修改月间隔,则月统计数据会被全部清除,但年、周、日的统计数据不会受到影响。
如何清理数据库
以我的一个实验环境为例,VCenter是2.5,数据库是Oracle10.2.0.4,先看看我的各个表的大小:
SQL> select count(*) from vpx_task;
COUNT(*)
----------
1773
SQL> select count(*) from vpx_event;
COUNT(*)
----------
247112
SQL> select count(*) from vpx_event_arg;
COUNT(*)
----------
358282
SQL> select count(*) from vpx_hist_stat1;
COUNT(*)
----------
9892
SQL> select count(*) from vpx_hist_stat2;
COUNT(*)
----------
11140
SQL> select count(*) from vpx_hist_stat3;
COUNT(*)
----------
11199
SQL> select count(*) from vpx_hist_stat4;
COUNT(*)
----------
6681
段的大小
SQL> select bytes from user_segments where segment_name=\'VPX_EVENT\';
BYTES
----------
53477376
SQL> select bytes from user_segments where segment_name=\'VPX_EVENT_ARG\';
BYTES
----------
47185920
SQL> select bytes from user_segments where segment_name=\'VPX_TASK\'
BYTES
----------
2097152
再看一下数据库文件大小及使用情况
SQL> conn sys/lenovo@vpx as sysdba
已连接。
SQL> set linesize 800;
SQL> col tablespace_name format a10;
SQL> select
2 d.status,
3 d.tablespace_name,
4 d.contents,
5 TO_CHAR(NVL(a.bytes / 1024 / 1024, 0),\'99G999G990\') \"total\",
6 TO_CHAR(NVL(a.bytes - NVL(f.bytes, 0), 0)/1024/1024 ,\'99G999G990\') \"used\",
7 TO_CHAR(NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0), \'990\')||\'%\' \"used %\",
8 TO_CHAR(NVL(f.bytes / 1024 / 1024, 0),\'99G999G990\') \"free \"
9 from sys.dba_tablespaces d,
10 (select tablespace_name,sum(bytes) bytes from dba_data_files group by tablespace_name) a,
11 (select tablespace_name,sum(bytes) bytes,max(bytes) largest_free
12 from dba_free_space group by tablespace_name) f
13 WHERE d.tablespace_name = a.tablespace_name
14 AND d.tablespace_name = f.tablespace_name
15 order by 6;
STATUS TABLESPACE CONTENTS total used used free
--------- ---------- --------- ----------- ----------- ----- -----------
ONLINE USERS PERMANENT 5 0 9% 5
ONLINE VPX PERMANENT 1,000 289 29% 711
ONLINE UNDOTBS1 UNDO 45 18 40% 27
ONLINE SYSAUX PERMANENT 410 396 96% 14
ONLINE SYSTEM PERMANENT 500 491 98% 9
其中,VPX的表空间是VCenter使用的表空间。
清理步骤:
1、 从VMware网站上下载相关脚本
http://kb.vmware.com/selfservice ... ;externalId=1000125
脚本分Oracle和SQL Server,Oracle包含四个脚本,包括清除任务(VCDB_TASK_CLEANUP_ORACLE.sql)、事件(VCDB_EVENT_CLEANUP_ORACLE.sql)、VC2.0统计数据(VCDB_HIST_STAT_CLEANUP_ORACLE_V20.sql)、VC2.5统计数据(VCDB_HIST_STAT_CLEANUP_ORACLE_V25.sql)。
2、 关闭vCenter Server.
3、 拷贝脚本到数据库服务器下执行,在执行脚本时需要先编辑脚本,以VCDB_TASK_CLEANUP_ORACLE.sql为例,脚本中有一段配置文件
-- ######### USER CONFIGURABLE PARAMETERS ########################
-- 0 = COUNT ONLY; 1 = DELETE ROWS
DEL_DATA := 0;
SELECT sys_extract_utc(systimestamp) INTO purge_time FROM DUAL;
--Use one of these methods to specifiy the data cutoff date
--CUTOFF_DATE := \'2007/01/01\'
CUTOFF_DATE := purge_time -180;
--Number of rows to delete per transaction
BATCH_SIZE := 10000;
-- ######### END USER CONFIGURABLE PARAMETERS ####################
如果不做任何修改直接执行,将显示从CUTOFF_DATE开始有多少条数据能被清除
SQL> @VCDB_TASK_CLEANUP_ORACLE.sql
Logged in user: VPXADMIN
Cutoff date: \'21-8月 -08\'
Batch size: 10000
21-3月 -09 starting...
Number of Task data will be purged : 1768
在配置文件中,参数DEL_DATA表示是否要删除,CUTOFF_DATE参数表示从什么时候开始删除,BATCH_SIZE表示一次要删除多少条数据,在我的环境中,修改过后的脚本中的配置段为
-- ######### USER CONFIGURABLE PARAMETERS ########################
-- 0 = COUNT ONLY; 1 = DELETE ROWS
DEL_DATA := 1;
SELECT sys_extract_utc(systimestamp) INTO purge_time FROM DUAL;
--Use one of these methods to specifiy the data cutoff date
--CUTOFF_DATE := \'2007/01/01\'
--CUTOFF_DATE := purge_time -180;
CUTOFF_DATE := purge_time
--Number of rows to delete per transaction
BATCH_SIZE := 10000;
-- ######### END USER CONFIGURABLE PARAMETERS ####################
执行结果为
SQL> @VCDB_TASK_CLEANUP_ORACLE.sql
Logged in user: VPXADMIN
Cutoff date: \'21-3月 -09\'
Batch size: 10000
21-3月 -09 starting...
Number of Task data is purged : 1768
再依次执行VCDB_EVENT_CLEANUP_ORACLE.sql、VCDB_HIST_STAT_CLEANUP_ORACLE_V25.sql两个脚本,删除数据。再次查看
SQL> select count(*) from vpx_task;
COUNT(*)
----------
5
SQL> select count(*) from vpx_event;
COUNT(*)
----------
0
SQL> select count(*) from vpx_event_arg;
COUNT(*)
----------
0
SQL> select count(*) from vpx_hist_stat1;
COUNT(*)
----------
327
SQL> select count(*) from vpx_hist_stat2;
COUNT(*)
----------
0
SQL> select count(*) from vpx_hist_stat3;
COUNT(*)
----------
0
SQL> select count(*) from vpx_hist_stat4;
COUNT(*)
----------
0
由于是delete语句操作,表空间并没有释放,但是可以被后来的语句再次使用,这样就起到了回收空间的作用,清除了数据库。 |
|