Làm cách nào để có được sp_Blitz Index của Brent Ozar chạy trên Azure?


13

Tôi đã tải xuống Bộ công cụ sơ cứu SQL Server từ trang web của Brent Ozar. Khi tôi cố chạy tập lệnh sp_BlitzIndex dựa trên cơ sở dữ liệu chính của mình thông qua Microsoft Sql Server Management Studio trong khi đăng nhập với tư cách quản trị viên cấp cơ sở dữ liệu Azure và tôi đã gặp lỗi sau:

Msg 262, Cấp 14, Bang 18, Thủ tục sp_Blitz Index, Dòng 18 TẠO QUY TRÌNH cho phép bị từ chối trong cơ sở dữ liệu 'chính chủ'.

Tôi đã tạo thành công thủ tục trên cơ sở dữ liệu mà tôi muốn kiểm tra. Khi tôi thực hiện thủ tục, tôi gặp lỗi:

Msg 50000, Cấp 16, Bang 1, Dòng 1265 Tên đối tượng không hợp lệ 'mydatabase.sys.partitions'.

Tiếp theo, tôi đã cố gắng khéo léo và chạy mã thủ tục được lưu trữ trực tiếp vào cơ sở dữ liệu chủ mà không tạo thủ tục được lưu trữ và gặp lỗi sau:

Msg 50000, Cấp 15, Trạng thái 1, Dòng 1267 Tham chiếu đến cơ sở dữ liệu và / hoặc tên máy chủ trong 'mydatabase.sys.indexes' không được hỗ trợ trong phiên bản SQL Server này.

Tôi không cảm thấy đủ tự tin để bắt đầu đùa giỡn với hoạt động bên trong của ~ 2700 dòng logic heuristic chỉ số. Có cách nào nhanh chóng và dễ dàng để làm cho thủ tục được lưu trữ này hoạt động tốt trên Cơ sở dữ liệu Azure SQL hay tôi nên tìm một công cụ phân tích chỉ mục / thủ tục được lưu trữ ở nơi khác?

Câu trả lời:


24

Kendra đây (tác giả của sp_BlitzIndex)

Đầu tiên, cảm ơn bạn đã quan tâm đến thủ tục và thử nó.

Azure không hiển thị tất cả các chế độ xem quản lý động mà chúng tôi nhận được trong sản phẩm được đóng hộp. Tôi thực sự tham khảo sys.dm_db_partition_stats, nhưng có thông tin khác tôi cần nhận được từ sys.partitionsnhững người dùng khác. (Có phải nó đang sử dụng nén không? Kiểu gì?)

Tôi chưa có thời gian để viết thử nghiệm một phiên bản cụ thể của Azure, chỉ vì tôi không có nhiều nhu cầu về nó. Nhưng câu hỏi của bạn cho tôi biết có nhiều sự quan tâm hơn tôi biết - vì vậy có điều đó!

Tôi sẽ xem xét tối thiểu việc thực hiện một số xử lý lỗi để nó cho bạn biết một cách duyên dáng. (Đây là một chút của mục tiêu di động, vì Azure cũng đang mở rộng các tính năng có sẵn cho người dùng.)


1
Vì V12 tiếp xúc với nhiều DMV hơn, bạn có nghĩ rằng bạn sẽ có thể thực hiện sp_BlitzIndexcông việc trên V12 không, hay nó vẫn còn thiếu quá nhiều bit có liên quan đáng giá? Với điều kiện bạn có thời gian rảnh / nhu cầu tất nhiên. :)
Erik

@Kendra - Sẽ thật tuyệt nếu điều này có thể được cập nhật để hoạt động trên Azure !! Tôi nhận thấy phiên bản mới nhất 20160715 không có lỗi khi tôi chạy sp_BlitzIndexnhưng nghi ngờ là nó không có vấn đề lớn nào được tìm thấy. Tôi nghi ngờ điều này là do thông tin bắt buộc không có sẵn trong Azure. Khi tôi chạy với @mode=4tôi nhận được một lỗi.
Rory

Tôi đang làm việc cho các dự án khác ngay bây giờ và đã quá lâu kể từ khi tôi làm việc trên sp_Blitz Index mà tôi không biết liệu tôi có nhận ra mã hay không. Nhưng tin tốt, bây giờ nó là nguồn mở! Những người khác cũng có thể làm điều đó. Bạn có thể tham gia tại Firstresponderkit.org
kendra

1

Ví dụ , một số truy vấn 'tiêu chuẩn' để xác định các chỉ mục bị thiếu chạy trên Azure, ví dụ :

  SELECT
  migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (migs.user_seeks + migs.user_scans) AS improvement_measure,
  'CREATE INDEX [missing_index_' + CONVERT (varchar, mig.index_group_handle) + '_' + CONVERT (varchar, mid.index_handle)
  + '_' + LEFT (PARSENAME(mid.statement, 1), 32) + ']'
  + ' ON ' + mid.statement
  + ' (' + ISNULL (mid.equality_columns,'')
    + CASE WHEN mid.equality_columns IS NOT NULL AND mid.inequality_columns IS NOT NULL THEN ',' ELSE '' END
    + ISNULL (mid.inequality_columns, '')
  + ')'
  + ISNULL (' INCLUDE (' + mid.included_columns + ')', '') AS create_index_statement,
  migs.*, mid.database_id, mid.[object_id]
FROM sys.dm_db_missing_index_groups mig
INNER JOIN sys.dm_db_missing_index_group_stats migs ON migs.group_handle = mig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details mid ON mig.index_handle = mid.index_handle
WHERE migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (migs.user_seeks + migs.user_scans) > 10
ORDER BY migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans) DESC

Chúng có thể ít hữu ích hơn nhiều sp_BlitzIndexnhưng đáng để thử.

Đây là một truy vấn tiện dụng khác để xác định các truy vấn hàng đầu, sau đó bạn có thể chạy với Kế hoạch thực thi để xác định các chỉ mục bị thiếu thông qua SQL Management Studio. Tàn nhẫn làm từng cái một nhưng tốt hơn là không có gì:

SELECT TOP 1000 qs.execution_count, 
       qs.total_worker_time, 
       qs.total_worker_time / qs.execution_count AS 'Avg CPU Time', 
       qs. total_physical_reads, 
       qs.total_physical_reads / qs.execution_count AS 'Avg Physical Reads', 
       qs.total_logical_reads, 
       qs.total_logical_reads / qs.execution_count AS 'Avg Logical Reads', 
       qs.total_logical_writes, 
       qs.total_logical_writes / qs.execution_count AS 'Avg Logical Writes', 
       SUBSTRING(st.text, qs.statement_start_offset / 2 + 1, 
        (CASE qs.statement_end_offset
                     WHEN-1 THEN DATALENGTH(st.text)
                     ELSE qs.statement_end_offset
                     END
           - qs.statement_start_offset) / 2 + 1)AS statement_text
  FROM sys.dm_exec_query_stats AS qs 
  CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle)AS st
  ORDER BY qs.execution_count DESC;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.