从SQL获取VM guest虚拟机数据存储区利用率

我们直接从vSphere 4.1数据库运行各种报告,以获取快照,预订等的策略概览。

我目前遇到的问题是我无法find客人的数据存储使用情况。

所以VM来自VPX_VM:

SELECT VM.ID, ENTITY.NAME FROM VPX_VM VM INNER JOIN VPX_ENTITY ENTITY ON (VM.ID=ENTITY.ID) /* ID | NAME 41 | Guest1 /* 

我可以从VPX_GUEST_DISK获得访客使用情况:

 SELECT * FROM VPX_GUEST_DISK /* VM_ID | PATH | CAPACITY | FREE_SPACE 41 | C:\ | 30 Gb | 10 Gb 41 | D:\ | 25 Gb | 20 Gb 41 | F:\ | 100 Gb | 15 Gb 41 | G:\ | 100 Gb | 4 Gb 41 | H:\ | 100 Gb | 20 Gb 41 | I:\ | 250 Gb | 10 Gb 41 | J:\ | 50 Gb | 9 Gb */ 

我可以从VPX_DS_ASSIGNMENT中find正在使用的数据存储:

 SELECT VM.ID, ENTITY.NAME, ASS.DS_ID, DS.NAME FROM VPX_VM VM INNER JOIN VPX_ENTITY ENTITY ON (VM.ID=ENTITY.ID) LEFT JOIN VPX_DS_ASSIGNMENT ASS ON (ASS.ENTITY_ID=VM.ID) LEFT JOIN VPX_DATASTORE DS ON (ASS.DS_ID=DS.ID) /* ID | NAME | DS_ID | NAME 41 | Guest1 | 15 | Datastore1 41 | Guest1 | 21 | Datastore2 41 | Guest1 | 50 | Datastore3 41 | Guest1 | 380 | Datastore4 41 | Guest1 | 382 | Datastore5 */ 

请注意,这里只有5个分配,因为guest虚拟机的F:和G:磁盘在同一个数据存储上,而I:和J:磁盘在同一个(不同的)数据存储上。

但是我找不到每个数据存储区有多less使用。 我真正需要的是链接,告诉我每个VPX_GUEST_DISK所在的数据存储区。

这是我所需要的最终结果:

 ID | NAME | DS_ID | NAME | ASSIGNED 41 | Guest1 | 15 | Datastore1 | 30 Gb 41 | Guest1 | 21 | Datastore2 | 25 Gb 41 | Guest1 | 50 | Datastore3 | 25 Gb 41 | Guest1 | 380 | Datastore4 | 100 Gb 41 | Guest1 | 382 | Datastore5 | 300 Gb 

甚至

 ID | NAME | DS_ID | NAME | ASSIGNED 41 | Guest1 | 15 | Datastore1 | 30 Gb 41 | Guest1 | 21 | Datastore2 | 25 Gb 41 | Guest1 | 50 | Datastore3 | 100 Gb 41 | Guest1 | 50 | Datastore3 | 100 Gb 41 | Guest1 | 380 | Datastore4 | 100 Gb 41 | Guest1 | 382 | Datastore5 | 250 Gb 41 | Guest1 | 382 | Datastore5 | 50 Gb 

(为了清楚起见,我已经显示了大小,但是在数据库中实际上是以字节为单位的)

试试这个:

 select ds.ds_name, ds.ds_capacity_gb, ds.ds_free_gb, -- vm.name, substring(vm.name, len(ds.storage_url) + 1, len(vm.name) - len(ds.storage_url)) file_name, CONVERT(decimal(10, 0), CONVERT(decimal(15, 0), vm.file_size) / 1024 / 1024 / 1024) AS file_size_gb, vm.type from vpx_vm_fle_file_info vm, (select name as ds_name, storage_url, CONVERT(decimal(10, 0), CONVERT(decimal(15, 0), CAPACITY) / 1024 / 1024 / 1024) AS ds_capacity_gb, CONVERT(decimal(10, 0), CONVERT(decimal(15, 0), FREE_SPACE) / 1024 / 1024 / 1024) AS ds_free_gb from vpx_datastore) ds where vm_id = 7000 -- filter by datastores and substring(vm.name, 1, len(ds.storage_url)) = ds.storage_url 

– 为所有虚拟机文件评论这个; 这只会过滤大约1 GB的文件。 和file_size> 1e9