我从 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 数据库上很好地工作,或者我应该在别处寻找索引分析工具/存储过程?
肯德拉在这里(作者
sp_BlitzIndex
)首先,感谢您对该程序感兴趣并尝试一下。
Azure 不会公开我们在盒装产品中获得的所有动态管理视图。我确实参考
sys.dm_db_partition_stats
了,但我需要从sys.partitions
其他用户那里获取其他信息。(是否使用压缩?什么类型?)我还没有时间编写一个 Azure 特定版本的测试,只是因为我对它没有太多的需求。但是你的问题确实告诉我有比我所知道的更多的兴趣——所以就是这样!
我将至少看看实现一些错误处理,以便它以一种优雅的方式让你知道。(这是一个移动的目标,因为 Azure 一直在扩展用户可用的功能。)
一些用于识别缺失索引的“标准”查询确实在 Azure 上运行,例如:
它们可能没有那么有用,
sp_BlitzIndex
但值得一试。这是另一个方便的查询,用于识别最热门的查询,然后您可以使用执行计划运行该查询,以通过 SQL Management Studio 识别缺失的索引。一件一件地做很乏味,但总比没有好: