135 lines
4.8 KiB
SQL
135 lines
4.8 KiB
SQL
|
|
select upper(trim(vm.client_id)) as wz
|
|
,item.key as gpu_model
|
|
,sum(item.value::int*p.value)/12. as gpu_h -- 5 minute sampling
|
|
,avg(item.value::int*p.value)*744 as gpu_ha -- 5 minute sampling
|
|
from gpu.vm
|
|
JOIN gpu.vm_power_state p on (vm.obj_uuid=p.obj_uuid)
|
|
CROSS JOIN LATERAL jsonb_each(vm.gpu) AS item(key, value)
|
|
where 1=1
|
|
AND p.ts >= '2026-07-01'
|
|
AND p.ts < '2026-07-31'
|
|
group by vm.client_id, item.key
|
|
order by vm.client_id, item.key;
|
|
|
|
--select * from gpu.vm_power_state limit 100;
|
|
--select * from gpu.vm limit 100;
|
|
|
|
select count(*), sum(value) from gpu.vm_power_state p
|
|
where 1=1
|
|
AND p.ts >= '2026-07-01'
|
|
AND p.ts < '2026-07-31'
|
|
group by obj_uuid
|
|
|
|
select item.key as gpu_model,
|
|
case
|
|
WHEN org_vdc LIKE '%-v1cl1%' THEN 'iaas.ngc.i29'
|
|
WHEN org_vdc LIKE '%-v1cl2%' THEN 'iaas.ngc.i31'
|
|
WHEN org_vdc LIKE '%-v1cl4%' THEN 'iaas.ngc.a28'
|
|
WHEN org_vdc LIKE '%-v1cl5%' THEN 'iaas.ngc.a45'
|
|
WHEN org_vdc LIKE '%-v1cl6%' THEN 'iaas.ngc.i28'
|
|
WHEN org_vdc LIKE '%-v1cl7%' THEN 'iaas.ngc.a40'
|
|
--WHEN org_vdc LIKE '%-v2cl2-1c%' THEN '1c'
|
|
else '['||org_vdc||']' end as code
|
|
from gpu.vm
|
|
CROSS JOIN LATERAL jsonb_each(vm.gpu) AS item(key, value)
|
|
group by item.key, code
|
|
ORDER BY 1
|
|
|
|
|
|
select client_id, org, obj_id, org_vdc, item.key as gpu_model, item.value as gpu_cnt
|
|
from gpu.vm
|
|
CROSS JOIN LATERAL jsonb_each(vm.gpu) AS item(key, value)
|
|
ORDER BY client_id, org, obj_id
|
|
|
|
|
|
select
|
|
count(distinct obj_id) as unique_vm_cnt,
|
|
sum(p.value)/12. as vm_h, -- 5 minute sampling
|
|
sum(p.value)/12.*32.18 as cost,
|
|
sum(p.value)/12./744 as avg_month_vm -- в августе 744 часа
|
|
from gpu.vm
|
|
JOIN gpu.vm_power_state p on (vm.obj_uuid=p.obj_uuid)
|
|
where 1=1
|
|
AND p.ts >= '2026-08-01'
|
|
AND p.ts < '2026-08-31'
|
|
AND vm.client_id='WZ01516'
|
|
-- упражнение: посчитать, сколько средних ВМ, включенных круглые сутки, создаст такой же движ за время оказания сервиса
|
|
|
|
select
|
|
p.ts::date,
|
|
count(distinct obj_id) as unique_vm_cnt,
|
|
round((sum(p.value)/12.)::numeric,1) as vm_h, -- 5 minute sampling
|
|
round((sum(p.value)/12.*32.18)::numeric,2) as cost,
|
|
round((sum(p.value)/12./24)::numeric, 1) as avg_roundclock_vm
|
|
from gpu.vm
|
|
JOIN gpu.vm_power_state p on (vm.obj_uuid=p.obj_uuid)
|
|
where 1=1
|
|
AND p.ts >= '2026-08-01'
|
|
AND p.ts < '2026-08-31'
|
|
AND vm.client_id='WZ01516'
|
|
GROUP BY p.ts::date
|
|
ORDER BY 1
|
|
|
|
select
|
|
p.ts::date,
|
|
count(distinct obj_id) as unique_vm_cnt,
|
|
round((sum(p.value)/12.)::numeric,1) as vm_h, -- 5 minute sampling
|
|
round((sum(p.value)/12.*32.18)::numeric,2) as cost,
|
|
round((sum(p.value)/12.*32.18*(1-0.02*400/32.18))::numeric,2) as cost_wo_disk,
|
|
round((count(distinct obj_id)*0.02*400*24)::numeric,2) as disk_cost_simplified, -- считаем все ВМ, включавшиеся за данные сутки
|
|
round((sum(p.value)/12./24)::numeric, 1) as avg_roundclock_vm
|
|
from gpu.vm
|
|
JOIN gpu.vm_power_state p on (vm.obj_uuid=p.obj_uuid)
|
|
where 1=1
|
|
AND p.ts >= '2026-08-01'
|
|
AND p.ts < '2026-08-31'
|
|
AND vm.client_id='WZ01516'
|
|
GROUP BY p.ts::date
|
|
ORDER BY 1
|
|
|
|
select
|
|
p.ts::date,
|
|
count(distinct obj_id) as unique_vm_cnt,
|
|
(select count(distinct obj_id) from gpu.vm vm1
|
|
JOIN gpu.vm_power_state p1 on (vm1.obj_uuid=p1.obj_uuid)
|
|
WHERE vm1.client_id='WZ01516' AND p1.ts <= p.ts::date) as unique_vm_acc,
|
|
round((sum(p.value)/12.)::numeric,1) as vm_h, -- 5 minute sampling
|
|
round((sum(p.value)/12.*32.18)::numeric,2) as cost,
|
|
round((sum(p.value)/12.*32.18*(1-0.02*400/32.18))::numeric,2) as cost_wo_disk,
|
|
round((count(distinct obj_id)*0.02*400*24)::numeric,2) as disk_cost_simplified, -- считаем все ВМ, включавшиеся за данные сутки
|
|
round((sum(p.value)/12./24)::numeric, 1) as avg_roundclock_vm
|
|
from gpu.vm
|
|
JOIN gpu.vm_power_state p on (vm.obj_uuid=p.obj_uuid)
|
|
where 1=1
|
|
AND p.ts >= '2026-08-01'
|
|
AND p.ts < '2026-08-31'
|
|
AND vm.client_id='WZ01516'
|
|
GROUP BY p.ts::date
|
|
ORDER BY 1
|
|
|
|
|
|
with daily as (
|
|
select
|
|
p.ts::date as dt,
|
|
count(distinct obj_id) as unique_vm_cnt,
|
|
round((sum(p.value)/12.)::numeric,1) as vm_h, -- 5 minute sampling
|
|
round((sum(p.value)/12.*32.18)::numeric,2) as cost,
|
|
round((sum(p.value)/12.*32.18*(1-0.02*400/32.18))::numeric,2) as cost_wo_disk,
|
|
round((count(distinct obj_id)*0.02*400*24)::numeric,2) as disk_cost_simplified, -- считаем все ВМ, включавшиеся за данные сутки
|
|
round((sum(p.value)/12./24)::numeric, 1) as avg_roundclock_vm
|
|
from gpu.vm
|
|
JOIN gpu.vm_power_state p on (vm.obj_uuid=p.obj_uuid)
|
|
where 1=1
|
|
AND p.ts >= '2026-08-01'
|
|
AND p.ts < '2026-08-31'
|
|
AND vm.client_id='WZ01516'
|
|
GROUP BY p.ts::date
|
|
ORDER BY 1
|
|
),
|
|
acc as (select p.ts::date as dt, count(distinct obj_id) as unique_vm_accum from gpu.vm
|
|
JOIN gpu.vm_power_state p on (vm.obj_uuid=p.obj_uuid)
|
|
WHERE vm.client_id='WZ01516'
|
|
group by p.ts::date)
|
|
select * from daily join acc on daily.dt<=acc.dt
|