AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 108989
Accepted
Erik
Erik
Asked: 2015-08-05 09:31:31 +0800 CST2015-08-05 09:31:31 +0800 CST 2015-08-05 09:31:31 +0800 CST

如何让 Brent Ozar 的 sp_BlitzIndex 在 Azure 上运行?

  • 772

我从 Brent Ozar 的网站下载了 SQL Server 急救包。当我以 Azure 数据库服务器级别管理员身份登录时,尝试通过 Microsoft Sql Server Management Studio 对我的主数据库运行sp_BlitzIndex脚本时,出现以下错误:

消息 262,级别 14,状态 18,过程 sp_BlitzIndex,第 18 行数据库“主”中的创建过程权限被拒绝。

我在要测试的数据库实例上成功创建了该过程。当我执行该过程时,我收到一条错误消息:

消息 50000,级别 16,状态 1,第 1265 行无效的对象名称“mydatabase.sys.partitions”。

接下来我想聪明点,直接针对master数据库运行存储过程代码,不创建存储过程,得到如下错误:

消息 50000,级别 15,状态 1,第 1267 行对“mydatabase.sys.indexes”中的数据库和/或服务器名称的引用在此版本的 SQL Server 中不受支持。

我没有足够的信心开始玩弄约 2700 行索引启发式逻辑的内部工作原理。有没有一种快速、简单的方法可以让这个存储过程在 Azure SQL 数据库上很好地工作,或者我应该在别处寻找索引分析工具/存储过程?

t-sql azure-sql-database
  • 2 2 个回答
  • 2231 Views

2 个回答

  • Voted
  1. Best Answer
    Kendra Little
    2015-08-05T13:46:40+08:002015-08-05T13:46:40+08:00

    肯德拉在这里(作者sp_BlitzIndex)

    首先,感谢您对该程序感兴趣并尝试一下。

    Azure 不会公开我们在盒装产品中获得的所有动态管理视图。我确实参考sys.dm_db_partition_stats了,但我需要从sys.partitions其他用户那里获取其他信息。(是否使用压缩?什么类型?)

    我还没有时间编写一个 Azure 特定版本的测试,只是因为我对它没有太多的需求。但是你的问题确实告诉我有比我所知道的更多的兴趣——所以就是这样!

    我将至少看看实现一些错误处理,以便它以一种优雅的方式让你知道。(这是一个移动的目标,因为 Azure 一直在扩展用户可用的功能。)

    • 27
  2. Rory
    2016-07-27T16:26:56+08:002016-07-27T16:26:56+08:00

    一些用于识别缺失索引的“标准”查询确实在 Azure 上运行,例如:

      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
    

    它们可能没有那么有用,sp_BlitzIndex但值得一试。

    这是另一个方便的查询,用于识别最热门的查询,然后您可以使用执行计划运行该查询,以通过 SQL Management Studio 识别缺失的索引。一件一件地做很乏味,但总比没有好:

    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;
    
    • 1

相关问题

  • 如何使用 TSQL 更改 SQL 服务器配置管理器设置?

  • 如何从结果集中获取列名和类型的列表?

  • MS SQL:使用计算值计算其他值

  • 如何判断 SQL Server 数据库是否仍在使用?

  • 实施 PIVOT 查询

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve