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

Phân tích hoạt động theo thời gian thực và chỉ mục cửa hàng theo cột không được phân cụm

Trong bài viết này, chúng tôi sẽ tập trung vào phân tích hoạt động thời gian thực và cách áp dụng phương pháp này cho cơ sở dữ liệu OLTP. Khi nhìn vào mô hình phân tích truyền thống, chúng ta có thể thấy OLTP và môi trường phân tích là những cấu trúc riêng biệt. Trước hết, các môi trường mô hình phân tích truyền thống cần tạo các tác vụ ETL (Trích xuất, Chuyển đổi và Tải). Vì chúng ta cần chuyển dữ liệu giao dịch vào kho dữ liệu. Những kiểu kiến ​​trúc này có một số nhược điểm. Đó là chi phí, độ phức tạp và độ trễ của dữ liệu. Để loại bỏ những nhược điểm này, chúng ta cần một cách tiếp cận khác.

Phân tích hoạt động theo thời gian thực

Microsoft đã công bố Phân tích hoạt động theo thời gian thực trong SQL Server 2016. Khả năng của tính năng này là kết hợp cơ sở dữ liệu giao dịch và khối lượng công việc truy vấn phân tích mà không gặp bất kỳ vấn đề nào về hiệu suất. Phân tích hoạt động theo thời gian thực cung cấp:

  • cấu trúc kết hợp
  • các truy vấn phân tích và giao dịch có thể được thực hiện cùng một lúc
  • không gây ra bất kỳ vấn đề về hiệu suất và độ trễ nào.
  • một cách triển khai đơn giản.

Tính năng này có thể khắc phục được những nhược điểm của môi trường phân tích truyền thống. Chủ đề chính của tính năng này là chỉ mục lưu trữ cột duy trì một bản sao dữ liệu mà không ảnh hưởng đến hiệu suất của hệ thống giao dịch. Chủ đề này cho phép các truy vấn phân tích thực thi mà không ảnh hưởng đến hiệu suất. Vì vậy, điều này giảm thiểu tác động đến hiệu suất. Hạn chế chính của tính năng này là chúng tôi không thể thu thập dữ liệu từ các nguồn dữ liệu khác nhau.

Chỉ mục cửa hàng theo cột không được phân cụm

SQL Server 2016 giới thiệu “Chỉ mục cửa hàng cột không phân cụm” có thể cập nhật. Chỉ mục lưu trữ theo cột không được phân cụm là chỉ mục dựa trên cột cung cấp lợi ích về hiệu suất cho các truy vấn phân tích. Tính năng này cho phép chúng tôi tạo khung phân tích hoạt động thời gian thực. Điều đó có nghĩa là chúng tôi có thể thực hiện các giao dịch và truy vấn phân tích cùng một lúc. Hãy xem xét rằng chúng tôi cần tổng doanh số hàng tháng. Trong một mô hình truyền thống, chúng ta phải phát triển các nhiệm vụ ETL, data mart và kho dữ liệu. Nhưng trong phân tích hoạt động thời gian thực, chúng tôi có thể làm điều đó mà không yêu cầu bất kỳ kho dữ liệu nào hoặc bất kỳ thay đổi nào đối với cấu trúc OLTP. Chúng tôi chỉ cần tạo chỉ mục lưu trữ cột không phân cụm phù hợp.

Kiến trúc của chỉ mục lưu trữ cột không phân cụm

Hãy nhanh chóng xem xét kiến ​​trúc của chỉ mục lưu trữ cột không phân cụm và cơ chế chạy. Chỉ mục lưu trữ cột không phân cụm chứa bản sao của một phần hoặc tất cả các hàng và cột trong bảng bên dưới. Chủ đề chính của chỉ mục lưu trữ cột không phân cụm là duy trì một bản sao dữ liệu và sử dụng bản sao dữ liệu này. Vì vậy, cơ chế này giảm thiểu tác động đến hiệu suất cơ sở dữ liệu giao dịch. Chỉ mục lưu trữ cột không phân cụm có thể tạo một hoặc nhiều cột và có thể áp dụng bộ lọc cho các cột.

Khi chúng tôi chèn một hàng mới vào bảng có chỉ mục lưu trữ cột không phân cụm, trước tiên, SQL Server tạo một “nhóm hàng”. Rowgroup là một cấu trúc logic đại diện cho một tập hợp các hàng. Sau đó, SQL Server lưu trữ các hàng này trong bộ nhớ tạm thời. Tên của bộ nhớ tạm thời này là “deltastore”. SQL Server sử dụng vùng lưu trữ tạm thời này vì cơ chế này cải thiện tỷ lệ nén và giảm phân mảnh chỉ mục. Khi số hàng đạt được 1.048.577, SQL Server đóng trạng thái của nhóm hàng. SQL Server nén nhóm hàng này và thay đổi trạng thái thành "nén".

Bây giờ, chúng ta sẽ tạo một bảng và thêm chỉ mục lưu trữ cột không phân cụm.

 DROP TABLE IF EXISTS Analysis_TableTestCREATE TABLE Analysis_TableTest (ID INT PRIMARY KEY IDENTITY (1,1), Continent_Name VARCHAR (20), Country_Name VARCHAR (20), City_Name VARCHAR (20), Sales_Amnt INT, Profit_Amnt INT) GO 
 TẠO CHỈ SỐ KHÔNG ĐƯỢC ĐIỀU CHỈNH COLUMNSTORE [NonClusteredColumnStoreIndex] ON [dbo]. [Analysis_TableTest] ([Country_Name], [City_Name], Sales_Amnt) VỚI (DROP_EXISTING =OFF, COMPRESSION_DELAY =0) ON [PRIMARY] 

Trong bước này, chúng tôi sẽ chèn một số hàng và xem xét các thuộc tính của chỉ mục lưu trữ cột không phân cụm.

 INSERT INTO Analysis_TableTest VALUES ('Europe', 'Germany', 'Munich', '100', '12') INSERT INTO Analysis_TableTest VALUES ('Châu Âu', 'Thổ Nhĩ Kỳ', 'Istanbul', '200', ' 24 ') INSERT INTO Analysis_TableTest VALUES (' Châu Âu ',' Pháp ',' Paris ',' 190 ',' 23 ') INSERT INTO Analysis_TableTest VALUES (' Châu Mỹ ',' Hoa Kỳ ',' Newyork ',' 180 ',' 19 ') INSERT INTO Analysis_TableTest VALUES (' Châu Á ',' Nhật Bản ',' Tokyo ',' 190 ',' 17 ') ĐI 

Truy vấn này sẽ hiển thị trạng thái nhóm hàng, tổng số kích thước hàng và các giá trị khác.

 SELECT i.object_id, object_name (i.object_id) AS TableName, i.name AS IndexName, i.index_id, i.type_desc, CSRowGroups. *, 100 * (total_rows - ISNULL (delete_rows, 0)) / total_rows AS PercentFull FROM sys.indexes AS i THAM GIA sys.column_store_row_groups NHƯ CSRowGroups TRÊN i.object_id =CSRowGroups.object_id VÀ i.index_id =CSRowGroups.index_id LỆNH BẰNG object_name (i.object_id), i.name, row_group_id; 
  

Hình ảnh trên cho chúng ta thấy trạng thái deltastore và tổng số hàng không được nén. Bây giờ chúng ta sẽ điền nhiều dữ liệu hơn vào bảng và khi số hàng đạt được là 1.048.577, SQL Server sẽ đóng nhóm hàng đầu tiên và mở một nhóm hàng mới.

 INSERT INTO Analysis_TableTest VALUES ('Europe', 'Germany', 'Munich', '100', '12') INSERT INTO Analysis_TableTest VALUES ('Châu Âu', 'Thổ Nhĩ Kỳ', 'Istanbul', '200', ' 24 ') INSERT INTO Analysis_TableTest VALUES (' Châu Âu ',' Pháp ',' Paris ',' 190 ',' 23 ') INSERT INTO Analysis_TableTest VALUES (' Châu Mỹ ',' Hoa Kỳ ',' Newyork ',' 180 ',' 19 ') INSERT INTO Analysis_TableTest VALUES (' Châu Á ',' Nhật Bản ',' Tokyo ',' 190 ',' 17 ') ĐI 2000000 

SQL Server sẽ nén nhóm hàng này và tạo một nhóm hàng mới. Tùy chọn “COMPRESSION_DELAY” cho phép chúng tôi kiểm soát thời gian nhóm hàng đợi ở trạng thái đã đóng.

Khi chúng tôi chạy các lệnh duy trì chỉ mục (tổ chức lại, xây dựng lại) các hàng đã xóa sẽ bị xóa về mặt vật lý và chỉ mục được chống phân mảnh.

Khi chúng tôi cập nhật (xóa + chèn) một số hàng trong bảng này, các hàng đã xóa được đánh dấu là "đã xóa" và các hàng cập nhật mới sẽ được chèn vào deltastore.

Điểm chuẩn hiệu suất truy vấn phân tích

Trong tiêu đề này, chúng tôi sẽ điền dữ liệu vào bảng Analysis_TableTest. Tôi đã chèn 4 triệu bản ghi. (Bạn phải kiểm tra bước này và các bước tiếp theo trong môi trường thử nghiệm của mình. Các vấn đề về hiệu suất có thể xảy ra và lệnh DBCC DROPCLEANBUFFERS cũng có thể ảnh hưởng đến hiệu suất. Lệnh này sẽ xóa tất cả dữ liệu bộ đệm trên vùng đệm.)

Bây giờ chúng ta sẽ chạy truy vấn phân tích sau và kiểm tra các giá trị hiệu suất.

 ĐẶT THỐNG KÊ THỜI GIAN TRỰC TUYẾN THỐNG KÊ IO ONDBCC DROPCLEANBUFFERSchọn Country_Name, City_Name, SUM (CAST (Sales_Amnt AS Float)) AS [Doanh số bán hàng] từ nhóm Analysis_TableTest theoCountry_Name, City_Name 

Trong hình trên, chúng ta có thể thấy toán tử quét chỉ mục lưu trữ cột không phân cụm. Bảng dưới đây hiển thị CPU và thời gian thực thi. Truy vấn này tiêu tốn 1,765 mili giây trong CPU và hoàn thành trong 0,791 mili giây. Thời gian CPU lớn hơn thời gian đã trôi qua vì kế hoạch thực thi sử dụng bộ xử lý song song và phân phối tác vụ cho 4 bộ xử lý. Chúng ta có thể thấy nó trong thuộc tính toán tử “Columnstore Index Scan”. Giá trị "Số lần thực thi" cho biết điều này.

Bây giờ chúng ta sẽ thêm một gợi ý vào truy vấn để giảm số lượng bộ xử lý. Chúng tôi sẽ không thấy bất kỳ toán tử song song nào.

 ĐẶT THỐNG KÊ THỜI GIAN TRỰC TUYẾN THỐNG KÊ IO ONDBCC DROPCLEANBUFFERSchọn Country_Name, City_Name, SUM (CAST (Sales_Amnt AS Float)) AS [Doanh số bán hàng] từ nhóm Analysis_TableTest theoCountry_Name, City_NameOPTION (MAXDOP 1) 

Bảng dưới đây xác định thời gian thực hiện. Trong biểu đồ này, chúng ta có thể thấy thời gian trôi qua lớn hơn thời gian CPU vì SQL Server chỉ sử dụng một bộ xử lý.

Bây giờ chúng ta sẽ vô hiệu hóa chỉ mục lưu trữ cột không phân cụm và thực hiện cùng một truy vấn.

 ALTER INDEX [NNCI_Index] ON [dbo]. [Analysis_TableTest] DISABLEGOSET THỐNG KÊ THỜI GIAN ONSET THỐNG KÊ IO ONDBCC DROPCLEANBUFFERSchọn Country_Name, City_Name, SUM (CAST (Sales_Amnt AS Float)) AS [Số tiền bán hàng] từ nhóm AnalysisCable_TOP 1) 

Bảng trên cho chúng ta thấy chỉ mục lưu trữ cột không phân cụm cung cấp hiệu suất đáng kinh ngạc trong các truy vấn phân tích. Gần như, truy vấn được lập chỉ mục của cột lưu trữ tốt hơn năm lần so với truy vấn khác.

Kết luận

Phân tích hoạt động theo thời gian thực cung cấp tính linh hoạt đáng kinh ngạc vì chúng tôi có thể thực hiện các truy vấn phân tích trong hệ thống OLTP mà không có bất kỳ độ trễ dữ liệu nào. Đồng thời, các truy vấn phân tích này không ảnh hưởng đến hiệu suất của cơ sở dữ liệu OLTP. Tính năng này cung cấp cho chúng tôi khả năng quản lý dữ liệu giao dịch và các truy vấn phân tích trong cùng một môi trường.

Tài liệu tham khảo

Chỉ mục cửa hàng cột - Hướng dẫn tải dữ liệu

Bắt đầu với Cửa hàng cột để có phân tích hoạt động theo thời gian thực

Phân tích hoạt động theo thời gian thực

Đọc thêm:

Quét ngược chỉ mục SQL Server:Hiểu, điều chỉnh

Sử dụng chỉ mục trong bảng được tối ưu hóa bộ nhớ máy chủ SQL


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách viết các câu lệnh được chọn

  2. SQL khóa ngoại:Mọi thứ bạn cần biết về hoạt động khóa ngoại

  3. Cách sử dụng DISTINCT trong SQL

  4. Làm thế nào để cài đặt SQLcl trên windows?

  5. Tôi nên sử dụng chức năng che mặt dữ liệu nào?