sql >> Databáze >  >> RDS >> Sqlserver

Jak analyzovat aktivitu jedné databáze na serveru SQL

Použití jedné instance SQL Server pro mnoho projektů není neobvyklé. Definovat nejaktivnější projekt však může být docela obtížné. Dnes bych se rád podělil o několik způsobů, jak analyzovat aktivitu každé konkrétní databáze.

V tomto článku se budeme zabývat následujícími body:

  1. Počet databázových připojení
  2. Místo na disku
  3. Kapacita RAM
  4. Aktivita databázových souborů za určité časové období

Počet databázových připojení

Chcete-li definovat počet připojení, použijte master.dbo.sysprocesses

SELECT DB_NAME(p.dbid) db, COUNT(*) quantity 
FROM master.dbo.sysprocesses p 
WHERE p.spid > 50 
group by DB_NAME(p.dbid) 
ORDER BY 1

Všimněte si, že počet připojení nezobrazuje aktivitu a zatížení databáze. Připojení mohou být nečinná nebo aktivní.

Místo na disku

CREATE TABLE #sizingDB (dbname nvarchar(255), type_desc nvarchar(50), size_mb bigint)
 
INSERT INTO #sizingDB
exec sp_msforeachdb @command1 = 'use [?]; 
SELECT DB_NAME(),type_desc, SUM(size)*8/1024 as size FROM sys.database_files 
GROUP BY type_desc'
 
SELECT * FROM  #sizingDB
WHERE dbname NOT IN ('master','msdb','model')
ORDER BY dbname, type_desc DESC
 
DROP TABLE #sizingDB

Dotaz vrací dva řádky pro každou databázi. První řádek je velikost dat a druhý je protokol transakcí.

Součet datových souborů a protokolů vrátí pouze jeden řádek pro každou databázi.

select
    db_name(dbid), 
    sum(cast(size as bigint)) * 8 / 1024 as SizeGB,
    sum(case when f.groupid = 0 then 0 else cast(size as bigint) end) * 8 / 1024 as DataSizeMb,
    sum(case when f.groupid != 0 then 0 else cast(size as bigint) end) * 8 / 1024 as LogSizeMb
from master.sys.sysaltfiles as f
group by db_name(dbid)
order by SizeGB desc

Kapacita RAM

WITH AggregateBufferPoolUsage
AS
(SELECT DB_NAME(database_id) AS [Database Name],
CAST(COUNT(*) * 8/1024.0 AS DECIMAL (10,2))  AS [CachedSize]
FROM sys.dm_os_buffer_descriptors WITH (NOLOCK)
WHERE database_id > 4 -- system databases
AND database_id <> 32767 -- ResourceDB
GROUP BY DB_NAME(database_id))
SELECT ROW_NUMBER() OVER(ORDER BY CachedSize DESC) AS [Buffer Pool Rank], [Database Name], CachedSize AS [Cached Size (MB)],
		CAST(CachedSize / SUM(CachedSize) OVER() * 100.0 AS DECIMAL(5,2)) AS [Buffer Pool Percent]
FROM AggregateBufferPoolUsage
ORDER BY [Buffer Pool Rank];

Sloupec Procento fondu vyrovnávací paměti odráží procento spotřeby paměti z celkové kapacity.

Aktivita databázových souborů za určité časové období

SELECT DB_NAME(saf.dbid) AS [db],
	saf.name AS [name],
	vfs.BytesRead/1048576 AS [read],
	vfs.BytesWritten/1048576 AS [write]
	INTO #dbusage
FROM master..sysaltfiles AS saf
JOIN ::fn_virtualfilestats(NULL,NULL) AS vfs ON vfs.dbid = saf.dbid AND
												vfs.fileid = saf.fileid AND
												saf.dbid NOT IN (1,3,4)
WHERE  DB_NAME(saf.dbid) <> 'tempdb'
ORDER BY vfs.BytesRead/1048576 + BytesWritten/1048576 DESC
 
WAITFOR DELAY '00:01:00'
 
SELECT DB_NAME(saf.dbid) AS [db],
	saf.name AS [name],
	vfs.BytesRead/1048576 AS [read],
	vfs.BytesWritten/1048576 AS [write]
	INTO #dbusage2
FROM master..sysaltfiles AS saf
JOIN ::fn_virtualfilestats(NULL,NULL) AS vfs ON vfs.dbid = saf.dbid AND
												vfs.fileid = saf.fileid AND
												saf.dbid NOT IN (1,3,4)
WHERE  DB_NAME(saf.dbid) <> 'tempdb'
ORDER BY vfs.BytesRead/1048576 + BytesWritten/1048576 DESC
 
 
SELECT t.db,t.name,(t2.[read] - t.[read]) as tread,(t2.[write] - t.[write]) as [twrite]	
	FROM #dbusage t INNER JOIN #dbusage2 t2 on t.db= t2.db AND t.name=t2.name
		
DROP TABLE #dbusage
DROP TABLE #dbusage2

Skript bude ve výchozím nastavení shromažďovat informace za minutu. Pokud potřebujete zprávu na delší dobu, změňte WAITFOR DELAY ’00:01:00′.

Sestava vrací informace pro každý databázový soubor.

Závěr

I když máte mnoho projektů na jedné instanci SQL Serveru, stále můžete získat dostatek informací o každém z nich. Samozřejmě, pokud je projekt důležitý a vyžaduje zvláštní podmínky pro přístup, důrazně doporučuji umístit jej do samostatné instance, protože nemůžeme vidět a implementovat vše v rámci jedné instance a mnoha projektů.


  1. Jak nainstalovat SQL Developer na Mac

  2. Jak zaokrouhlit číslo na nejbližší celé číslo v SQL

  3. Jak optimalizovat tabulky MySQL/MariaDB

  4. Snadno převádějte své dotazy Microsoft Access pomocí tohoto nového nástroje!