Principale utente con più risposte
Differenza risultati: DBCC SQLPERF(logspace) e query su master_files

Domanda
-
Ciao a tutti,
avrei bisogno di un chiarimento sull'output di due comandi (come riportato in oggetto).
Vi descrivo lo scenario:
lancio il comando DBCC SQLPERF(logspace) e ottengo alcuni valori per i seguenti campi: Nome DB - Log size - Log space used (%) - Status
lancio la query SELECT name, (size*8.0)/1024.0 as sizeMB, max_size, ((size*100.0)/max_size) as percent FROM master.sys.master_files e ottengo altri valori in particolare per quanto riguarda la percentuale di occupazione (colonna "percent")
Vorrei dunque capire a cosa fa riferimento il valore del campo Log space used (%) ottenuto con il 1° comando. Io nella query faccio una semplice proporzione per capire il livello di occupazione rispetto alla dimensione massima del log
Qualcuno riesci ad aiutarmi!?
Grazie 1000!!!
Risposte
-
Il campo max_size della tabella sys.master_files indica le dimensioni massime del file espresse in pagine di 8K.
I valori che può assumere, però, dipendono da come hai settato la dimensione nelle proprietà del database.
Se non specificatamente indicato, solitamente avrai -1, che significa che il file può crescere fino a riempire il disco. Se invece trovi il valore 268435456 il file può crescere fino ad un massimo di 2TB.
Ecco perchè probabilmente non ti tornano i conti con la percentuale...
Puoi usare questa query:
SELECT db.[name] AS [Database Name], db.recovery_model_desc AS [Recovery Model], db.log_reuse_wait_desc AS [Log Reuse Wait Description], ls.cntr_value AS [Log Size (KB)], lu.cntr_value AS [Log Used (KB)], CAST(CAST(lu.cntr_value AS FLOAT) / CAST(ls.cntr_value AS FLOAT)AS DECIMAL(18,2)) * 100 AS [Log Used %], db.[compatibility_level] AS [DB Compatibility Level], db.page_verify_option_desc AS [Page Verify Option], db.is_auto_create_stats_on, db.is_auto_update_stats_on, db.is_auto_update_stats_async_on, db.is_parameterization_forced, db.snapshot_isolation_state_desc, db.is_read_committed_snapshot_on FROM sys.databases AS db WITH (NOLOCK) INNER JOIN sys.dm_os_performance_counters AS lu WITH (NOLOCK) ON db.name = lu.instance_name INNER JOIN sys.dm_os_performance_counters AS ls WITH (NOLOCK) ON db.name = ls.instance_name WHERE lu.counter_name LIKE N'Log File(s) Used Size (KB)%' AND ls.counter_name LIKE N'Log File(s) Size (KB)%' AND ls.cntr_value > 0 OPTION (RECOMPILE);
per monitorare lo stato dei files di log.
Fa parte di questi scripts creati da Glen Berry.
HTH
Danilo Dominici MCP MCDBA MCITP MCSE MCAD Questo post è fornito "così com'è". Non conferisce garanzie o diritti di alcun tipo. Ricorda di usare la funzione "segna come risposta" per i post che ti hanno aiutato a risolvere il problema e "deseleziona come risposta" quando le risposte segnate non sono effettivamente utili. Questo è particolarmente utile per altri utenti che leggono il thread, alla ricerca di soluzioni a problemi similari. ENG: This posting is provided "AS IS" with no warranties, and confers no rights. Please remember to click "Mark as Answer" on the post that helps you, and to click "Unmark as Answer" if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread.- Proposto come risposta Irina Turcu lunedì 28 novembre 2011 16:27
- Contrassegnato come risposta Irina Turcu giovedì 8 dicembre 2011 12:30
Tutte le risposte
-
-
Il campo max_size della tabella sys.master_files indica le dimensioni massime del file espresse in pagine di 8K.
I valori che può assumere, però, dipendono da come hai settato la dimensione nelle proprietà del database.
Se non specificatamente indicato, solitamente avrai -1, che significa che il file può crescere fino a riempire il disco. Se invece trovi il valore 268435456 il file può crescere fino ad un massimo di 2TB.
Ecco perchè probabilmente non ti tornano i conti con la percentuale...
Puoi usare questa query:
SELECT db.[name] AS [Database Name], db.recovery_model_desc AS [Recovery Model], db.log_reuse_wait_desc AS [Log Reuse Wait Description], ls.cntr_value AS [Log Size (KB)], lu.cntr_value AS [Log Used (KB)], CAST(CAST(lu.cntr_value AS FLOAT) / CAST(ls.cntr_value AS FLOAT)AS DECIMAL(18,2)) * 100 AS [Log Used %], db.[compatibility_level] AS [DB Compatibility Level], db.page_verify_option_desc AS [Page Verify Option], db.is_auto_create_stats_on, db.is_auto_update_stats_on, db.is_auto_update_stats_async_on, db.is_parameterization_forced, db.snapshot_isolation_state_desc, db.is_read_committed_snapshot_on FROM sys.databases AS db WITH (NOLOCK) INNER JOIN sys.dm_os_performance_counters AS lu WITH (NOLOCK) ON db.name = lu.instance_name INNER JOIN sys.dm_os_performance_counters AS ls WITH (NOLOCK) ON db.name = ls.instance_name WHERE lu.counter_name LIKE N'Log File(s) Used Size (KB)%' AND ls.counter_name LIKE N'Log File(s) Size (KB)%' AND ls.cntr_value > 0 OPTION (RECOMPILE);
per monitorare lo stato dei files di log.
Fa parte di questi scripts creati da Glen Berry.
HTH
Danilo Dominici MCP MCDBA MCITP MCSE MCAD Questo post è fornito "così com'è". Non conferisce garanzie o diritti di alcun tipo. Ricorda di usare la funzione "segna come risposta" per i post che ti hanno aiutato a risolvere il problema e "deseleziona come risposta" quando le risposte segnate non sono effettivamente utili. Questo è particolarmente utile per altri utenti che leggono il thread, alla ricerca di soluzioni a problemi similari. ENG: This posting is provided "AS IS" with no warranties, and confers no rights. Please remember to click "Mark as Answer" on the post that helps you, and to click "Unmark as Answer" if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread.- Proposto come risposta Irina Turcu lunedì 28 novembre 2011 16:27
- Contrassegnato come risposta Irina Turcu giovedì 8 dicembre 2011 12:30
-
Sei un grande!
Un'altra cosa, ma secondo te posso usare quella query per fare un controllo dei file di log? Ti spiego: io controllerei prima la % che mi viene restituita da DBCC SQLPERF(LOGSPACE), se raggiunge ad esempio un valore superiore al 90% controllo anche la % che mi viene restiuita dalla query sulla master_files.
In questo modo sono tranquillo, nel senso che se la dbcc restiuisce un valore alto, ma il file può crescere mi sta bene.
Se invece dal comando dbcc ho una % alta e anche la % tra size e max_size della master_files è alta allora mi devo preoccupare...
Che ne pensi?!
-
Secondo me la query che ti ho indicato è più che sufficiente per monitorare lo spazio del log.
Anche perchè, ripeto, la max_size può non essere sempre popolata per tutti i db.
Impostare la dimensione massima del file oppure lasciarlo libero fino a terminare lo spazio su disco è una questione filosofica :-)
Personalmente preferisco lasciare libero di crescere il file di log, monitorandolo e magari facendomi mandare degli alert al raggiungimento di soglie specifiche (50%, 75%, 90% ad esempio).Ci sono anche prodotti Open Source come Nagios che ti permettono di monitorare vari parametri di funzionamento di SQL Server (c'è anche un post dei giorni scorsi proprio su questo).
Danilo Dominici MCP MCDBA MCITP MCSE MCAD Questo post è fornito "così com'è". Non conferisce garanzie o diritti di alcun tipo. Ricorda di usare la funzione "segna come risposta" per i post che ti hanno aiutato a risolvere il problema e "deseleziona come risposta" quando le risposte segnate non sono effettivamente utili. Questo è particolarmente utile per altri utenti che leggono il thread, alla ricerca di soluzioni a problemi similari. ENG: This posting is provided "AS IS" with no warranties, and confers no rights. Please remember to click "Mark as Answer" on the post that helps you, and to click "Unmark as Answer" if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread.