Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

6 cách kiểm tra kích thước của cơ sở dữ liệu trong SQL Server bằng T-SQL

Nếu bạn đang sử dụng công cụ GUI, chẳng hạn như SSMS để quản lý cơ sở dữ liệu của mình, bạn có thể dễ dàng kiểm tra kích thước cơ sở dữ liệu của mình bằng cách nhấp theo cách của bạn thông qua GUI (nhấp chuột phải vào cơ sở dữ liệu, trỏ tới Báo cáo , sau đó đến Báo cáo chuẩn, và sau đó nhấp vào Sử dụng đĩa ).

Tuy nhiên, nếu bạn muốn sử dụng T-SQL để quản lý cơ sở dữ liệu của mình, bạn sẽ cần chạy một truy vấn trả về thông tin này.

Bài viết này trình bày sáu cách để kiểm tra kích thước của cơ sở dữ liệu SQL Server bằng T-SQL.

Thủ tục lưu trữ sp_spaceused

Đây là một thủ tục được lưu trữ trong hệ thống hiển thị số hàng, dung lượng đĩa dành riêng và dung lượng đĩa được sử dụng bởi bảng, dạng xem được lập chỉ mục hoặc hàng đợi Service Broker trong cơ sở dữ liệu hiện tại hoặc hiển thị dung lượng đĩa được toàn bộ cơ sở dữ liệu dự trữ và sử dụng.

Để sử dụng nó, chỉ cần chuyển sang cơ sở dữ liệu liên quan và thực hiện quy trình. Như thế này:

USE WideWorldImporters;
EXEC sp_spaceused;

Kết quả:

database_name       database_size  unallocated space
------------------  -------------  -----------------
WideWorldImporters  3172.00 MB     2511.76 MB       

1 row(s) returned

reserved   data       index_size  unused 
---------  ---------  ----------  -------
573688 KB  461728 KB  104120 KB   7840 KB

1 row(s) returned

Điều này trả về hai tập hợp kết quả cung cấp thông tin liên quan.

Bạn cũng có thể cung cấp tên đối tượng để trả về dữ liệu trên một đối tượng cụ thể trong cơ sở dữ liệu. Trong trường hợp này, chỉ một tập hợp kết quả sẽ được trả về.

Ví dụ:

USE WideWorldImporters;
EXEC sp_spaceused N'Application.Cities';

Kết quả:

name    rows                  reserved  data     index_size  unused
------  --------------------  --------  -------  ----------  ------
Cities  37940                 4880 KB   3960 KB  896 KB      24 KB

Trong ví dụ này, chúng tôi trả lại thông tin về Cities chỉ bảng.

Thủ tục lưu trữ sp_helpdb

Một quy trình khác được lưu trữ trong hệ thống là sp_helpdb .

Dưới đây là một ví dụ về cách gọi đó:

EXEC sp_helpdb N'WideWorldImporters';

Kết quả:

name          fileid  filename          filegroup  size        maxsize        growth    usage    
------------  ------  ----------------  ---------  ----------  -------------  --------  ---------
WWI_Primary   1       /data/WWI.mdf     PRIMARY    1048576 KB  Unlimited      65536 KB  data only
WWI_Log       2       /data/WWI.ldf     null       102400 KB   2147483648 KB  65536 KB  log only 
WWI_UserData  3       /data/WWI_UD.ndf  USERDATA   2097152 KB  Unlimited      65536 KB  data only

Trong trường hợp này, chúng tôi chuyển tên của cơ sở dữ liệu làm đối số. Chúng tôi cũng có thể gọi sp_helpdb mà không cung cấp một đối số. Nếu chúng tôi làm điều này, nó sẽ trả về thông tin trên tất cả các cơ sở dữ liệu trong sys.databases xem danh mục.

Thủ tục lưu trữ sp_databases

Tuy nhiên, một tùy chọn khác là sp_databases hệ thống lưu trữ thủ tục. Thủ tục được lưu trữ này liệt kê các cơ sở dữ liệu nằm trong một phiên bản của SQL Server hoặc có thể truy cập được thông qua cổng cơ sở dữ liệu.

Đây là cách thực thi nó:

EXEC sp_databases;

Kết quả:

DATABASE_NAME       DATABASE_SIZE  REMARKS
------------------  -------------  -------
master              6848           null   
model               16384          null   
msdb                15616          null   
Music               16384          null   
Nature              16384          null   
Solutions           47104          null   
tempdb              16384          null   
Test                16384          null   
WideWorldImporters  3248128        null   
world               16384          null   
WorldData           16384          null

Chế độ xem sys.master_files

Quy trình được lưu trữ ở trên truy vấn sys.master_files lượt xem. Vì vậy, một giải pháp thay thế là đi thẳng đến chế độ xem và chọn các cột của bạn:

SELECT
    name,
    size,
    size * 8/1024 'Size (MB)',
    max_size
FROM sys.master_files
WHERE DB_NAME(database_id) = 'WideWorldImporters';

Kết quả:

name          size    Size (MB)  max_size 
------------  ------  ---------  ---------
WWI_Primary   131072  1024       -1       
WWI_Log       12800   100        268435456
WWI_UserData  262144  2048       -1       

Trong trường hợp này, chúng tôi có thể thấy kích thước của từng tệp dữ liệu và tệp nhật ký, vì chúng được liệt kê riêng. Bạn cũng sẽ nhận thấy rằng tôi thực hiện một phép tính trên size để chuyển đổi giá trị thành megabyte (MB).

Chế độ xem sys.database_files

Ngoài ra còn có một chế độ xem hệ thống được gọi là sys.database_files . Chúng tôi có thể sử dụng chế độ xem này để trả về cùng một thông tin như ví dụ trước:

USE WideWorldImporters;
SELECT
    name,
    size,
    size * 8/1024 'Size (MB)',
    max_size
FROM sys.database_files;

Kết quả:

name          size    Size (MB)  max_size 
------------  ------  ---------  ---------
WWI_Primary   131072  1024       -1       
WWI_Log       12800   100        268435456
WWI_UserData  262144  2048       -1       

Sử dụng chức năng cửa sổ

Một vấn đề tiềm ẩn với hai ví dụ trước là chúng liệt kê kích thước của từng tệp riêng biệt. Điều này có thể được coi là tích cực hoặc tiêu cực tùy thuộc vào những gì bạn muốn đạt được.

Cũng có thể lập luận rằng ba giải pháp đầu tiên trên trang này có vấn đề, vì chúng chỉ cung cấp tổng số của tất cả các tệp - chúng không liệt kê ra từng tệp riêng lẻ cùng với kích thước của nó.

Vì vậy, điều gì xảy ra nếu bạn muốn xem cả kích thước của từng tệp riêng lẻ, tổng số tất cả các tệp cho mỗi cơ sở dữ liệu?

Bạn có thể sử dụng OVER mệnh đề để thực hiện chính xác điều đó.

Đây là một ví dụ:

SELECT
    d.name AS 'Database',
    m.name AS 'File',
    m.size,
    m.size * 8/1024 'Size (MB)',
    SUM(m.size * 8/1024) OVER (PARTITION BY d.name) AS 'Database Total',
    m.max_size
FROM sys.master_files m
INNER JOIN sys.databases d ON
d.database_id = m.database_id;

Kết quả:

Database            File             Size (MB)  Database Total
------------------  ---------------  ---------  --------------
master              master           4          6             
master              mastlog          2          6             
model               modeldev         8          16            
model               modellog         8          16            
msdb                MSDBData         14         14            
msdb                MSDBLog          0          14            
Music               Music            8          16            
Music               Music_log        8          16            
Nature              Nature           8          16            
Nature              Nature_log       8          16            
Solutions           Solutions        8          46            
Solutions           Solutions_log    8          46            
Solutions           Solutions_dat_2  10         46            
Solutions           Solutions_dat_3  10         46            
Solutions           Solutions_log_2  10         46            
tempdb              tempdev          8          16            
tempdb              templog          8          16            
WideWorldImporters  WWI_Primary      1024       3172          
WideWorldImporters  WWI_Log          100        3172          
WideWorldImporters  WWI_UserData     2048       3172          
world               world            8          16            
world               world_log        8          16       

Phần này liệt kê từng cơ sở dữ liệu, các tệp cho mỗi cơ sở dữ liệu, kích thước tệp cho mỗi tệp, cũng như tổng số tất cả các tệp cho mỗi cơ sở dữ liệu. Điều này yêu cầu mỗi cơ sở dữ liệu (và tổng kích thước của chúng) được liệt kê nhiều lần (một lần cho mỗi tệp).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Định cấu hình Lucene.Net với SQL Server

  2. Làm thế nào để loại bỏ khoảng trắng đầu và cuối trong SQL Server - TRIM ()

  3. SYSDATETIME () so với GETDATE () trong SQL Server:Sự khác biệt là gì?

  4. Cách nhận dữ liệu 7 ngày qua từ ngày hiện tại đến 7 ngày qua trong máy chủ sql

  5. PIVOT trong sql 2005