Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara Menganalisis Aktivitas Satu Database di SQL Server

Menggunakan satu contoh SQL Server untuk banyak proyek bukanlah hal yang aneh. Namun, mendefinisikan proyek yang paling aktif mungkin cukup sulit. Hari ini, saya ingin berbagi beberapa cara untuk menganalisis aktivitas setiap database tertentu.

Dalam artikel ini, kita akan mempertimbangkan poin-poin berikut:

  1. Jumlah koneksi database
  2. Ruang disk
  3. Kapasitas RAM
  4. Aktivitas file database untuk jangka waktu tertentu

Jumlah koneksi database

Untuk menentukan jumlah koneksi, gunakan 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

Perhatikan bahwa jumlah koneksi tidak menampilkan aktivitas dan beban database. Koneksi dapat dalam keadaan idle atau aktif.

Ruang disk

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

Kueri mengembalikan dua baris untuk setiap database. Baris pertama adalah ukuran data dan baris kedua adalah log transaksi.

Jumlah file data dan log hanya mengembalikan satu baris untuk setiap database.

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

kapasitas 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];

Kolom Buffer Pool Percent mencerminkan persentase konsumsi memori dari total kapasitas.

Aktivitas file database untuk jangka waktu tertentu

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

Script akan mengumpulkan informasi per menit secara default. Jika Anda memerlukan laporan untuk jangka waktu yang lebih lama, ubah TUNDA TUNGGU '0:01:00′.

Laporan mengembalikan informasi untuk setiap file database.

Kesimpulan

Bahkan jika Anda memiliki banyak proyek pada satu contoh SQL Server, Anda masih bisa mendapatkan informasi yang cukup tentang masing-masing proyek. Tentu saja, jika proyek tersebut penting dan memerlukan kondisi khusus untuk mengaksesnya, saya sangat menyarankan untuk memasukkannya ke dalam instance terpisah, karena kita tidak dapat melihat dan mengimplementasikan semuanya dalam satu instance dan banyak proyek.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mengembalikan Semua Batasan Kunci Asing yang Dinonaktifkan di SQL Server (Contoh T-SQL)

  2. Cara memasukkan baris baru dengan benar di nvarchar

  3. Cara Membuat Script Untuk Mengaktifkan Semua Batasan Kunci Asing di Database SQL Server - Tutorial SQL Server / TSQL Bagian 78

  4. hash baris SQL?

  5. Apa itu Basis Data dan Sistem Manajemen Basis Data Relasional (RDBMS)