Precisa de ajuda com o código abaixo, pois falha com erro de truncamento
Ocorreu um erro de truncamento. O comando foi abortado.
create table monCacheQuality (
ServerName sysname
,CollectionDateTime smalldatetime not null
,PhysicalWrites decimal(15, 0) not null
,PhysicalReads decimal(15, 0) not null
,LogicalReads decimal(15, 0) not null
,CacheQuality decimal(15, 0) not null
,CacheHitPct decimal(15,4) not null
)
-- Main code starts here
declare @physical_read1 decimal(15, 0)
,@logical_read1 decimal(15, 0)
,@physical_write1 decimal(15, 0)
,@cache_search1 decimal (15,4)
declare @physical_read2 decimal(15, 0)
,@logical_read2 decimal(15, 0)
,@physical_write2 decimal(15, 0)
,@cache_search2 decimal (15,4)
while (1=1)
begin
select @physical_write1 = PhysicalWrites
,@physical_read1 = PhysicalReads
,@logical_read1 = LogicalReads
,@cache_search1 = CacheSearches
from master..monDataCache
waitfor delay '00:00:20' -- Log every 20 sec
select @physical_write2 = PhysicalWrites
,@physical_read2 = PhysicalReads
,@logical_read2 = LogicalReads
,@cache_search2 = CacheSearches
from master..monDataCache
insert monCacheQuality
select @@servername as ServerName
,getUTCdate()
,@physical_write2 - @physical_write1
,@physical_read2 - @physical_read1
,@logical_read2 - @logical_read1
,case
when @physical_read2 - @physical_read1 = 0
then - 1
else (@logical_read2 - @logical_read1) / (@physical_read2 - @physical_read1)
end as CacheQuality
,100-(((@physical_read2-@physical_read1)/(@cache_search2-@cache_search1))*100) as CacheHitPct
end
Caso alguém queira configurar a CACHE QUALITY para Sybase ASE 15 e superior, o script abaixo ajudará:
Mudanças para que o script funcione rápido sem sobrecarga de consultar tabelas MDA e o problema de truncamento é resolvido ao mudar para tipo de
int
dados.:CacheID = 0
A última alteração é apenas uma alteração lógica para quando leituras físicas = 0, assim salvamos as leituras lógicas.
then @logical_read2 - @logical_read1