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

Giám sát TempDB SQL Server bằng cách sử dụng chế độ xem quản lý động (DMV)

TempDB trong MS SQL Server là gì?

TempDB là cơ sở dữ liệu hệ thống trong Microsoft SQL Server được sử dụng làm nơi lưu trữ các đối tượng bên trong, phiên bản hàng, bảng công việc, bảng tạm thời và chỉ mục. TempDB có sẵn để sử dụng cho tất cả những người tham gia được kết nối với phiên bản SQL Server (nó là tài nguyên chung). Đối với những người quen thuộc với các hương vị cơ sở dữ liệu khác, cơ sở dữ liệu tempDB tương tự như không gian bảng TEMP trong Oracle. Nói một cách nhẹ nhàng, bất cứ thứ gì không thể phù hợp với bộ nhớ phiên bản của bạn sẽ tràn sang các tệp dữ liệu tempdb.

TempDB thường được sử dụng trong các trường hợp sau:

  1. Bảng tạm thời được tạo với quy ước đặt tên #. Tôi đã thấy một hoặc hai ứng dụng trong cửa hàng của mình tạo ra rất nhiều quy ước này. Kết quả là, nó có thể ảnh hưởng đến hiệu suất. Đối với mỗi bảng tạm thời, TempDB phân phối các trang có kích thước phụ thuộc vào kích thước bảng. Ngoài ra, có thể xảy ra một số xung đột nếu một số phiên đồng thời đang tạo các Bảng tạm thời như vậy đồng thời.
  2. Mức cô lập READ_COMMITTED_SNAPSHOT được bật. Chúng tôi đã phải thực hiện việc này trên hai phiên bản của mình cách đây vài năm vì có hai ứng dụng đang gặp phải một số lần deadlock nghiêm trọng. Sử dụng các mức cô lập ảnh chụp nhanh là một cách để giải quyết các bế tắc, đặc biệt nếu bạn không muốn qua lại với các nhà phát triển về cách viết mã phù hợp. Bạn nên biết rằng điều này được kỳ vọng sẽ giúp cải thiện hiệu suất. Tuy nhiên, nó sử dụng kiểm soát đồng thời lạc quan, điều có thể không được mong muốn trong mọi trường hợp liên quan đến tính toàn vẹn của dữ liệu.
  3. Chỉ mục được tạo hoặc xây dựng lại với tùy chọn SORT_IN_TEMPDB =ON. Nó có xu hướng loại bỏ gánh nặng sắp xếp từ cơ sở dữ liệu sở hữu chỉ mục trong khi quá trình xây dựng lại đang diễn ra. Việc kiểm tra tổng thể tác động của tùy chọn này có thể hữu ích đối với toàn bộ hiệu suất phiên bản.
  4. Chức năng Nhiều Bộ Kết quả Hoạt động (MARS) được bật. Không, MARS không phải là một hành tinh trong trường hợp này, nó là một tính năng cho phép một ứng dụng gửi nhiều lô thông qua một kết nối duy nhất. Nó bị tắt theo mặc định và có thể được bật rõ ràng bằng cách bao gồm MultipleActiveResultSets =True thành một chuỗi kết nối.
  5. Trong nội bộ, SQL Server cũng sử dụng TempDB để tạo bảng công việc thường được sử dụng trong các hoạt động con trỏ - lệnh gọi theo mệnh đề GROUP BY, ORDER BY hoặc UNION. Bảng công việc có thể được coi là bảng tạm thời được tạo bởi hoạt động của công cụ SQL Server chứ không phải bởi hoạt động của người dùng trực tiếp.

SQL Server Chế độ xem quản lý động có liên quan

Các chế độ xem quản lý động (DMV) có liên quan sau đây rất hữu ích khi điều tra hoạt động trong TempDB:

  1. sys.dm_db_file_space_usage :DMV này trả về một số thông tin về việc sử dụng dung lượng của các tệp trong cơ sở dữ liệu mà bạn quan tâm. Nó có thể được sử dụng để kiểm tra bất kỳ cơ sở dữ liệu nào trong phiên bản và đầu ra chỉ liên quan đến cơ sở dữ liệu đó. Trong khuôn khổ bài viết này, chúng tôi sẽ sử dụng DMV để kiểm tra TempDB.
  2. sys.dm_db_session_space_usage :DMV này dành riêng cho cơ sở dữ liệu TempDB và trả về số lượng trang được phân bổ và phân bổ theo từng phiên cho một cơ sở dữ liệu nhất định. Việc phân bổ trang thường được duy trì cho đến khi phiên kết thúc.
  3. sys.dm_db_task_space_usage :DMV này cũng dành riêng cho cơ sở dữ liệu TempDB và cung cấp một số thông tin về số lượng trang được phân bổ và phân bổ theo từng nhiệm vụ cho một cơ sở dữ liệu nhất định.
  4. sys.dm_tran_active_snapshot_database_transactions :DMV này trả về các giao dịch đang hoạt động tạo ra và có thể truy cập các phiên bản hàng. Chế độ xem này phù hợp khi các tùy chọn như ALLOW_SNAPSHOT_ISOLATION và READ_COMMITTED_SNAPSHOT được bật.
  5. sys.dm_tran_version_store :DMV này cung cấp một số thông tin về tất cả các bản ghi phiên bản trong cửa hàng phiên bản. Trong một máy chủ sản xuất đang hoạt động, các bản ghi trong bảng này có thể tăng lên đáng kể. Do đó, chúng tôi cần cẩn thận khi truy vấn DMV.

Chạy lệnh DMV trước khi làm việc với cơ sở dữ liệu TempDB

sys.dm_file_space_usage

Chúng tôi có thể lấy một số mô tả về các DMV này từ tài liệu của Microsoft.

Bảng 1 cho thấy mô tả của sys.dm_file_space_usage . Truy vấn trong Liệt kê 1 hiển thị việc sử dụng không gian tệp cho cơ sở dữ liệu TempDB và WideWorldImporters tương ứng. Hình 1 và 2 trả về kết quả đầu ra của truy vấn này với cả cơ sở dữ liệu TempDB và WideWorldImporters tương ứng.

[id bảng =44 /]

Bảng 1:mô tả về sys.dm_file_space_usage

-- List 1: Check space usage on database files
-- Check space usage on tempdb
use tempdb
go
select db_name(database_id) [Database_name]
,file_name(file_id) [File_name]
,filegroup_id
,total_page_count [TPC]
,total_page_count*8/1024 [TSU (MB)]
,allocated_extent_page_count [AEPC]
,allocated_extent_page_count*8/1024 [AEPC (MB)]
,version_store_reserved_page_count [VSRP]
,version_store_reserved_page_count*8/1024 [VSRP (MB)]
,user_object_reserved_page_count [UORP]
,user_object_reserved_page_count*8/1024 [UORPC (MB)]
,internal_object_reserved_page_count [IORPC]
,internal_object_reserved_page_count*8/1024 [UORPC (MB)]
,mixed_extent_page_count [MEPC]
,mixed_extent_page_count*8/1024 [MEPC (MB)]
from sys.dm_db_file_space_usage;
-- Check space usage on WideWorldImporters
use WideWorldImporters
go
select db_name(database_id) [Database_name]
,file_name(file_id) [File_name]
,filegroup_id
,total_page_count [TPC]
,total_page_count*8/1024 [TSU (MB)]
,allocated_extent_page_count [AEPC]
,allocated_extent_page_count*8/1024 [AEPC (MB)]
,version_store_reserved_page_count [VSRP]
,version_store_reserved_page_count*8/1024 [VSRP (MB)]
,user_object_reserved_page_count [UORP]
,user_object_reserved_page_count*8/1024 [UORPC (MB)]
,internal_object_reserved_page_count [IORPC]
,internal_object_reserved_page_count*8/1024 [UORPC (MB)]
,mixed_extent_page_count [MEPC]
,mixed_extent_page_count*8/1024 [MEPC (MB)]
from sys.dm_db_file_space_usage;

Hình 2 Đầu ra của Truy vấn trên sys.dm_file_space_usage (WideWorldImporters)

Lưu ý rằng cột total_page_count hiển thị kích thước chính xác của tệp cơ sở dữ liệu được đề cập. Ngoài ra, các loại tệp LOG và FILESTREAM không được hiển thị. Ngoài ra, như mong đợi, phân bổ_extent_page_count khớp với không gian đã sử dụng trong tệp dữ liệu WWI_UserData.

Hình 3 Kích thước tệp trên Cơ sở dữ liệu WideWorldImporters

sys.dm_db_session_space_usage

Bảng 2 cho thấy việc sử dụng sys.dm_db_session_space_usage DMV. Liệt kê 2 là đầu ra của truy vấn. Lưu ý rằng số hàng được trả về khớp với số phiên hiện tại (hoạt động hoặc không hoạt động) trong trường hợp. Ngoài ra, hãy nhớ rằng DMV này CHỈ liên quan đến TempDB.

[id bảng =45 /]

Bảng 2:mô tả về sys.dm_db_session_space_usage

-- Listing 2: Check space allocation per session in the instance
-- Applies on to tempdb database
select
session_id
,db_name(database_id) [Database_name]
,user_objects_alloc_page_count [UOAPC]
,user_objects_alloc_page_count*8/1024 [UOAPC (MB)]
,user_objects_dealloc_page_count [UODPC]
,user_objects_dealloc_page_count*8/1024 [UODPC (MB)]
,internal_objects_alloc_page_count [UOAPC]
,internal_objects_alloc_page_count*8/1024 [UOAPC (MB)]
,internal_objects_dealloc_page_count [UODPC]
,internal_objects_dealloc_page_count*8/1024 [UODPC (MB)]
from sys.dm_db_session_space_usage;
select count(*) from sys.dm_exec_sessions;

sys.dm_db_task_space_usage

Bảng 3 cho thấy việc triển khai DMV sys.dm_db_task_space_usage. Liệt kê 3 hiển thị đầu ra của nó.

[id bảng =46 /]

Bảng 3:mô tả của sys.dm_db_task_space_usage

-- List 3: Check space allocation per task int the instance
-- Applies on to tempdb database
select
task_address
,is_remote_task
,session_id
,request_id
,exec_context_id
,db_name(database_id) [Database_name]
,user_objects_alloc_page_count [UOAPC]
,user_objects_alloc_page_count*8/1024 [UOAPC (MB)]
,user_objects_dealloc_page_count [UODPC]
,user_objects_dealloc_page_count*8/1024 [UODPC (MB)]
,internal_objects_alloc_page_count [UOAPC]
,internal_objects_alloc_page_count*8/1024 [UOAPC (MB)]
,internal_objects_dealloc_page_count [UODPC]
,internal_objects_dealloc_page_count*8/1024 [UODPC (MB)]
from sys.dm_db_task_space_usage;

Các truy vấn DMV khác trong MSSQL TempDB

Hai DMV khác dường như trống trước khi bất kỳ hoạt động cơ sở dữ liệu nào được thực thi. Bảng 4 và 5 hiển thị mô tả của cả hai bảng. Trong phần tiếp theo, chúng ta sẽ xem xét dữ liệu trong DMV thay đổi như thế nào khi chúng ta tạo hoạt động cơ sở dữ liệu.

[id bảng =47 /]

Bảng 4:mô tả về sys.dm_tran_active_snapshot_database_transactions

[id bảng =48 /]

Bảng 5:mô tả của sys.dm_tran_version_store

Kiểm tra DMV sau khi Hoạt động cơ sở dữ liệu hoàn tất

Hãy tạo ra một số hoạt động.

Để thực hiện việc này, hãy chạy các truy vấn đơn giản trong danh sách 4.

-- Listing 4
-- Query 1
use WideWorldImporters
go
select * from
[Sales].[Invoices];
-- Query 2
use WideWorldImporters
go
select * from
[Sales].[Invoices]
order by ContactPersonID;

Như bạn có thể thấy, không có phân bổ hoặc phân bổ đáng kể nào từ truy vấn nhỏ này, vì vậy chúng tôi nâng cao tiêu chuẩn bằng cách tạo một bảng tạm thời bằng cách sử dụng tập lệnh trong Liệt kê 5.

-- Listing 5
use WideWorldImporters
go
select *
into [#Invoices]
from [Sales].[Invoices];
use tempdb
go
drop table [#Invoices];

Bây giờ chúng tôi nhận được một số lượng đáng kể các trang được phân bổ và dành riêng cho phiên hoạt động 62 của chúng tôi (xem Hình 8). Ngoài ra, hãy chú ý đến số lượng đáng kể các phạm vi được phân bổ và các trang dành riêng được hiển thị trong sys.dm_db_file_space_usage (Hình 9).

Khi chúng ta tiếp tục và thả Temptable #Invoice, chúng ta thấy rằng các trang được phân bổ trong TempDB được phát hành như trong Hình 12. Tuy nhiên, kết quả đầu ra của DMV dm_db_session_space_usage vẫn chỉ ra rằng một số trang được phân bổ cho phiên. Chúng tôi thấy rằng điều này được phát hành ngay sau khi chúng tôi đóng phiên (ID phiên 62).

Tiếp theo, chúng tôi mở một phiên khác và tạo chỉ mục bằng cách sử dụng các truy vấn trong Liệt kê 6. Trong Truy vấn 1 loại trừ tùy chọn SORT_IN_TEMPDB và trong Truy vấn 2, chúng tôi sử dụng tùy chọn này sau khi bỏ chỉ mục. Không có phân bổ đáng kể nào xảy ra cho trường hợp đầu tiên nhưng chúng tôi thấy một số thay đổi khi sử dụng SORT_IN_TEMPDB. Sự thay đổi này là rất nhỏ so với kích thước của chỉ mục được đề cập (xem Hình 16 và 17).

Chúng tôi sẽ thực hiện bài kiểm tra cuối cùng. Chúng tôi phát hiện ra rằng cho đến thời điểm này, các DMV như sys.dm_tran_active_snapshot_database_transactions và sys.dm_tran_version_store không trả về hàng nào khi được truy vấn.

Hãy bật SNAPSHOT_ISOLATION và cấp độ cách ly READ_COMMITTED_SNAPSHOT (Liệt kê 7). Sau khi hoàn tất, một câu lệnh cập nhật duy nhất sẽ tạo một bản ghi trong DMV sys.dm_tran_version_store. Đặt cùng một truy vấn này là một giao dịch mà chúng tôi sử dụng để thấy rằng một bản ghi cũng được tạo trong sys.dm_tran_active_snapshot_database_transactions trong quá trình giao dịch.

-- Listing 7
ALTER DATABASE WideWorldImporters
SET ALLOW_SNAPSHOT_ISOLATION ON;
ALTER DATABASE WideWorldImporters
SET READ_COMMITTED_SNAPSHOT ON;
-- Listing 8
-- Query 1
 update [WideWorldImporters].[Sales].[Invoices]
 set DeliveryInstructions='Shop 50, 1476 Poddar Lane'
 where InvoiceID=48;
-- Query 2
-- Transaction
BEGIN TRAN
 update [WideWorldImporters].[Sales].[Invoices]
 set DeliveryInstructions='Shop 50, 1476 Poddar Lane'
 where InvoiceID=48;
 WAITFOR DELAY '00:00:30';
COMMIT TRAN;
GO

Kết luận

Chúng tôi đã khám phá ngắn gọn rằng chúng tôi có thể giám sát hoạt động TempDB bằng cách sử dụng năm DMV chính được SQL Server hiển thị. Khi sử dụng mức này của quy trình giám sát trong môi trường sản xuất, chúng tôi có thể xác định xem chúng tôi có cần thêm dung lượng trong TempDB và tệp dữ liệu hay không. Ngoài ra, chúng tôi có thể phân tích tác động của cách ly SNAPSHOT nếu chúng tôi đã bật tính năng này trước đó.

Dữ liệu đầu ra của các DMV này cũng có thể hữu ích trong việc hiển thị rõ ràng cho các nhà phát triển ứng dụng về tác động của hành vi mã của họ đối với tempDB và toàn bộ phiên bản. Nhìn chung, sẽ rất bổ ích khi hiểu được việc sử dụng các DMV này như một DBA liên quan đến quản lý hiệu suất và không gian.

Tài liệu tham khảo

Snapshot Isolation trong SQL Server
Sử dụng Nhiều Bộ Kết quả Hoạt động
Mô tả của sys.dm_tran_version_store
Mô tả của sys.dm_db_task_space_usage
Mô tả của sys.dm_file_space_usage
Mô tả của sys.dm_db_session_space_usage
Mô tả của sys.dm_tran_active_snapshot_database_transactions


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xóa các ký tự lạ (A có mũ) khỏi cột varchar của SQL Server

  2. Chuyển đổi ‘datetime2’ thành ‘date’ trong SQL Server (Ví dụ T-SQL)

  3. Perfect Storm để nâng cấp lên phiên bản SQL Server hiện đại

  4. SQL Server SHOW TABLES Tương đương

  5. Thứ tự của các cột trong chỉ mục quan trọng như thế nào?