热点
边缘运维精选工具链:数据整合驱动建站效能优化,reasoning_content:我们要求以边缘计算运维工程师的口吻,写一个与技术、科技相关,关于[精选工具链:驱动数据整合,优化建站效能]的标题直接输出一个标题,不要加说明,简短精炼,30字以内nn需要体现边缘计算运维工程师的身份特点,比如强调边缘、运维、工具链、数据整合、建站效能等可以结合边缘计算的特点:低延迟、分布式、实时处理标题风格可以技术化、有力nn可能的边缘工具链实战:数据整合加速建站效能或者:精选工具链驱动数据整合,优化边缘建站效能(这个可能超过30字?数一下:精选工具链驱动数据整合,优化边缘建站效能 - 共18个字,可以)但注意要体现边缘计算运维工程师的口吻,所以可以加入运维或边缘nn另一种:边缘运维工具链:数据整合提升建站效能或者:边缘数据整合利器,工具链优化建站太短不够完整nn考虑一个直接有力的:边缘运维精选工具链:数据整合驱动建站效能优化这个字数:边缘运维精选工具链:数据整合驱动建站效能优化 - 共16个字,可以nn更简洁:边缘工具链:数据整合优化建站效能14字nn但要求包含精选工具链:驱动数据整合,优化建站效能这个核心最好直接引用但稍作调整例如:精选工具链驱动数据整合,优化边缘建站效能18字nn注意精选工具链是固定的,那么标题可以是:精选工具链:驱动数据整合,优化建站效能这个正好是原句,但缺少边缘计算运维工程师的口吻可以加在开头:边缘运维:精选工具链驱动数据整合,优化建站效能这个也是18字,但冒号用法或者:边缘运维 | 精选工具链:驱动数据整合,优化建站效能带竖线也可nn为了更符合工程师口吻,可以写成:边缘运维实战:精选工具链驱动数据整合,优化建站效能20字nn或者:边缘计算运维:精选工具链驱动数据整合建站13字,但少了优化效能nn最终决定一个最合适:边缘运维精选工具链:数据整合驱动建站效能优化正好16字,精炼
性能工程师:全链路工具链整合提升建站效能,reasoning_content:我们要求以性能工程师的口吻,写一个与技术、科技相关,关于[优化导向工具链整合:全链路提升建站效能方案]的标题需要简短精炼,30字以内直接输出标题,不要加说明nn关键词:性能工程师、技术、科技、优化导向工具链整合、全链路、提升建站效能方案可以组合成类似:全链路工具链整合:性能工程师的建站效能提升方案 但需要更简洁nn可能的全链路工具链整合:性能工程师的建站效能提升 还是有点长或者:性能工程师打造全链路工具链,极致建站效能 但字数nn更精炼:全链路工具链整合:性能工程师的建站效能方案 (18字) 但方案重复了原文或者全链路工具链整合:性能优化提升建站效能 (18字) 但缺少性能工程师口吻nn要求以性能工程师口吻,可以写成:性能工程师:全链路工具链整合提升建站效能 (20字)或者工具链全链路整合:性能工程师的建站效能方案 (20字)注意不要超过30nn我想到:全链路工具链整合:性能工程师的效能提升方案 (19字)或者更技术:优化导向工具链全链路:性能工程师建站效能方案 (21字)nn最好包含科技或技术?题目说与'技术、科技'相关,可以加入一点科技感比如科技赋能:性能工程师全链路工具链整合方案 (20字)但方案可能多余直接科技赋能:性能工程师打造全链路工具链 (19字) 但缺少提升建站效能nn再考虑:性能工程师:全链路工具链整合,科技提升建站效能 (22字)有点长nn最简洁:全链路工具链整合:科技赋能建站效能 (16字) 但缺少性能工程师口吻可以在前面加性能工程师:变成性能工程师:全链路工具链整合科技赋能 (19字) 不太通顺nn更好的:性能工程师的科技利器:全链路工具链整合 (19字) 然后提升建站效能放后面?但字数可能超nn我决定采用:全链路工具链整合:性能工程师的建站效能科技方案 (21字) 有点啰嗦nn标准答案应简短有力参考类似标题常见格式:全链路工具链整合:性能工程师的效能提升之道 (19字)或者性能工程师:全链路工具链整合,建站效能最大化 (21字)nn个人偏好:性能工程师:全链路工具链整合提升建站效能 (20字) 很直接符合要求
Linux数据库环境速建与项目稳定运行指南,reasoning_content:我们要求以技术文档整理师的口吻,写一个与技术、科技相关的标题,主题是[Linux数据库环境快速搭建与项目稳定运行指南]需要简短精炼,30字以内直接输出标题,不要额外说明nn考虑几个方向:强调快速搭建、稳定运行、技术文档整理师的专业性可能的标题如:Linux数据库环境速建与项目稳定运行手册 或者 快速搭建Linux数据库环境,确保项目稳定运行指南注意字数nn一个简洁的版本:Linux数据库环境快速搭建与稳定运行指南 共16字或者加上技术文档整理的风格?但要求口吻是技术文档整理师,可以体现在标题中?不过标题本身不必写出口吻,只要符合即可可以更技术化:Linux数据库环境速建与项目稳定运行手册 16字nn或者:Linux数据库环境快速搭建与稳定运行实战指南 17字更精确:注意主题是[Linux数据库环境快速搭建与项目稳定运行指南],所以原样即可但要求是写一个标题,可以基于此nn我认为最直接: Linux数据库环境快速搭建与项目稳定运行指南 正好21字但可能长一点可以精简为:Linux数据库环境速建与稳定运行指南 15字nn为了更符合技术文档整理师,可以用速建手册或实操指南我选择:Linux数据库环境速建与项目稳定运行实操指南 19字nn最终输出一个标题,不加标点?可以不加
手撸Linux数据库运行环境架构,性能拉满,reasoning_content:我们要求以程序员的口吻,写一个与“技术、科技”相关,关于“[基于Linux的高效数据库运行环境架构方案]”的标题要求直接输出标题,不加说明,30字以内,简短精炼程序员口吻可以带点技术感、幽默或直接常见风格如“手撸...”、“深入浅出”、“性能优化”、“架构实战”等例如:“手把手教你搭建Linux下极致数据库运行环境”但字数略多?或者“Linux高效数据库架构:从零到极致”等要控制在30字以内简洁版:“Linux下数据库运行环境架构优化方案”但不够程序员口吻“一行代码?不,一套架构:Linux数据库高效环境实战”太长考虑:“Linux高效数据库运行环境架构方案详解”有点长“Linux数据库性能环境架构实战”?nn更程序员风格:“我重构了Linux数据库运行环境,性能提升10倍”但超过30字?数一下“我重构了Linux数据库运行环境,性能提升10倍”共18字?实际:我(1)重(2)构(3)了(4)Linux(9)数(10)据(11)库(12)运(13)行(14)环(15)境(16),(17)性(18)能(19)提(20)升(21)10(22)倍(23) 共23字符合但效果?或者更直接:“基于Linux的高效数据库环境架构方案”但缺乏程序员口吻可以用“手撸”开头“手撸Linux数据库运行环境架构,性能拉满”共16字?手(1)撸(2)Linux(7)数(8)据(9)库(10)运(11)行(12)环(13)境(14)架(15)构(16),(17)性(18)能(19)拉(20)满(21) 共21字可以nn注意必须直接输出标题,不要加引号我选一个最合适的
API开发利器:智能工具链整合优化建站效能,reasoning_content:我们要求以API开发工程师的口吻,写一个与技术、科技相关的标题,主题是“开发工程师利器:智能工具链整合优化建站效能指南”需要简短精炼,30字以内直接输出标题,不要额外说明nn考虑如何用API开发工程师的口吻:专业、技术化、强调效率、工具链、整合、优化、建站效能可以借鉴一些关键词如“API”、“集成”、“自动化”、“效能”、“利器”等nn可能的智能工具链整合,优化建站效能指南(17字)或者更精炼:API工具链整合,建站效能优化指南(14字)但需要体现“开发工程师利器”,可以加“利器”二字例如:API开发利器:智能工具链优化建站效能(16字)或者:智能工具链整合:提升建站效能指南(14字)注意字数限制nn最终决定:API开发工程师利器:智能工具链整合优化建站效能(19字)但“优化建站效能”可能重复或者:智能工具链整合,建站效能优化指南(14字)再考虑:API工具链整合,建站效能倍增指南(15字)要求“开发工程师利器”作为标题的一部分?题目说“写一个与...相关的标题”,主题是“开发工程师利器:...”但不需要完全照搬可以更简洁nn为了体现API开发工程师口吻,加“API”字样最终输出:API开发利器:智能工具链整合优化建站效能(17字)
17 9 月 2026, 周四

sql-server – 在调用数据库上下文时执行的中央存储过程

副标题#e#

我正在使用sys.dm_db_index_physical_stats视图开发自定义维护解决方案.我目前从存储过程中引用它.现在,当该存储过程在我的一个数据库上运行时,它会执行我想要它执行的操作,并下拉有关任何数据库的所有记录的列表.当我将它放在不同的数据库上时,它会下拉所有与该数据库相关的记录列表.

例如(底部的代码):

>针对数据库6的查询运行显示数据库1-10的[请求]信息.
>针对数据库3的查询运行仅显示数据库3的[请求]信息.

我特别想在数据库3上使用此过程的原因是因为我更喜欢将所有维护对象保留在同一个数据库中.我希望将这项工作放在维护数据库中并像在应用程序数据库中一样工作.

码:

ALTER PROCEDURE [dbo].[GetFragStats] 
    @databaseName   NVARCHAR(64) = NULL,@tableName     NVARCHAR(64) = NULL,@indexID       INT          = NULL,@partNumber    INT          = NULL,@Mode          NVARCHAR(64) = 'DETAILED'
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @databaseID INT,@tableID INT

    IF @databaseName IS NOT NULL
        AND @databaseName NOT IN ('tempdb','ReportServerTempDB')
    BEGIN
        SET @databaseID = DB_ID(@databaseName)
    END

    IF @tableName IS NOT NULL
    BEGIN
        SET @tableID = OBJECT_ID(@tableName)
    END

    SELECT D.name AS DatabaseName,T.name AS TableName,I.name AS IndexName,S.index_id AS IndexID,S.avg_fragmentation_in_percent AS PercentFragment,S.fragment_count AS TotalFrags,S.avg_fragment_size_in_pages AS PagesPerFrag,S.page_count AS NumPages,S.index_type_desc AS IndexType
    FROM sys.dm_db_index_physical_stats(@databaseID,@tableID,@indexID,@partNumber,@Mode) AS S
    JOIN 
       sys.databases AS D ON S.database_id = D.database_id
    JOIN 
       sys.tables AS T ON S.object_id = T.object_id
    JOIN 
       sys.indexes AS I ON S.object_id = I.object_id
                        AND S.index_id = I.index_id
    WHERE 
        S.avg_fragmentation_in_percent > 10
    ORDER BY 
        DatabaseName,TableName,IndexName,PercentFragment DESC    
END
GO

解决方法

一种方法是在master中创建系统过程,然后在维护数据库中创建一个包装器.请注意,这一次只适用于一个数据库.

首先,在硕士中:

USE [master];
GO
CREATE PROCEDURE dbo.sp_GetFragStats -- sp_prefix required
  @tableName    NVARCHAR(128) = NULL,@indexID      INT           = NULL,@partNumber   INT           = NULL,@Mode         NVARCHAR(20)  = N'DETAILED'
AS
BEGIN
  SET NOCOUNT ON;

  SELECT
    DatabaseName    = DB_NAME(),TableName       = t.name,IndexName       = i.name,IndexID         = s.index_id,PercentFragment = s.avg_fragmentation_in_percent,TotalFrags      = s.fragment_count,PagesPerFrag    = s.avg_fragment_size_in_pages,NumPages        = s.page_count,IndexType       = s.index_type_desc
    -- shouldn't s.partition_number be part of the output as well?
  FROM sys.tables AS t
  INNER JOIN sys.indexes AS i
    ON t.[object_id] = i.[object_id]
    AND i.index_id = COALESCE(@indexID,i.index_id)
    AND t.name = COALESCE(@tableName,t.name)
  CROSS APPLY
    sys.dm_db_index_physical_stats(DB_ID(),t.[object_id],i.index_id,@Mode) AS s
  WHERE s.avg_fragmentation_in_percent > 10
  -- probably also want to filter on minimum page count too
  -- do you really care about a table that has 100 pages?
  ORDER BY 
    DatabaseName,PercentFragment DESC;
END
GO
-- needs to be marked as a system object:
EXEC sp_MS_MarkSystemObject N'dbo.sp_GetFragStats';
GO

现在,在维护数据库中,创建一个使用动态SQL正确设置上下文的包装器:

USE YourMaintenanceDatabase;
GO
CREATE PROCEDURE dbo.GetFragStats
  @DatabaseName SYSNAME,-- can't really be NULL,right?
  @tableName    NVARCHAR(128) = NULL,@Mode         NVARCHAR(20)  = N'DETAILED'
AS
BEGIN
  DECLARE @sql NVARCHAR(MAX);

  SET @sql = N'USE ' + QUOTENAME(@DatabaseName) + ';
    EXEC dbo.sp_GetFragStats @tableName,@Mode;';

  EXEC sp_executesql 
    @sql,N'@tableName NVARCHAR(128),@indexID INT,@partNumber INT,@Mode NVARCHAR(20)',@tableName,@Mode;
END
GO

(数据库名称实际上不能为NULL的原因是因为它们不能连接到sys.objects和sys.indexes之类的东西,因为它们在每个数据库中独立存在.所以如果你想要实例范围的信息,可能有不同的过程.)

现在你可以为任何其他数据库调用它,例如

EXEC YourMaintenanceDatabase.dbo.GetFragStats 
  @DatabaseName = N'AdventureWorks2012',@TableName    = N'SalesOrderHeader';

并且您始终可以在每个数据库中创建同义词,因此您甚至不必引用维护数据库的名称:

USE SomeOtherDatabase;`enter code here`
GO
CREATE SYNONYM dbo.GetFragStats FOR YourMaintenanceDatabase.dbo.GetFragStats;

另一种方法是使用动态SQL,但是这也只能一次用于一个数据库:

USE YourMaintenanceDatabase;
GO
CREATE PROCEDURE dbo.GetFragStats
  @DatabaseName SYSNAME,@tableName    NVARCHAR(128) = NULL,@Mode         NVARCHAR(20)  = N'DETAILED'
AS
BEGIN
  SET NOCOUNT ON;

  DECLARE @sql NVARCHAR(MAX) = N'SELECT
    DatabaseName    = @DatabaseName,IndexType       = s.index_type_desc
  FROM ' + QUOTENAME(@DatabaseName) + '.sys.tables AS t
  INNER JOIN ' + QUOTENAME(@DatabaseName) + '.sys.indexes AS i
    ON t.[object_id] = i.[object_id]
    AND i.index_id = COALESCE(@indexID,t.name)
  CROSS APPLY
    ' + QUOTENAME(@DatabaseName) + '.sys.dm_db_index_physical_stats(
        DB_ID(@DatabaseName),@Mode) AS s
  WHERE s.avg_fragmentation_in_percent > 10
  ORDER BY 
    DatabaseName,PercentFragment DESC;';

  EXEC sp_executesql @sql,N'@DatabaseName SYSNAME,@tableName NVARCHAR(128),@DatabaseName,@Mode;
END
GO

#p#副标题#e##p#分页标题#e#

另一种方法是创建一个视图(或表值函数)来合并所有数据库的表和索引名称,但是您必须将数据库名称硬编码到视图中,并在添加时对其进行维护/删除要允许包含在此查询中的数据库.与其他数据库不同,它允许您一次检索多个数据库的统计信息.

一,观点:

CREATE VIEW dbo.CertainTablesAndIndexes
AS
  SELECT 
    db = N'AdventureWorks2012',[table] = t.name,[index] = i.name
  FROM AdventureWorks2012.sys.tables AS t
  INNER JOIN AdventureWorks2012.sys.indexes AS i
  ON t.[object_id] = i.[object_id]

  UNION ALL

  SELECT 
    db = N'database2',[index] = i.name
  FROM database2.sys.tables AS t
  INNER JOIN database2.sys.indexes AS i
  ON t.[object_id] = i.[object_id]

  -- ... UNION ALL ...
  ;
GO

然后程序:

CREATE PROCEDURE dbo.GetFragStats
  @DatabaseName NVARCHAR(128) = NULL,@Mode         NVARCHAR(20)  = N'DETAILED'
AS
BEGIN
  SET NOCOUNT ON;

  SELECT
    DatabaseName    = DB_NAME(s.database_id),TableName       = v.[table],IndexName       = v.[index],IndexType       = s.index_type_desc
  FROM dbo.CertainTablesAndIndexes AS v
  CROSS APPLY sys.dm_db_index_physical_stats
    (DB_ID(v.db),v.[object_id],v.index_id,@Mode) AS s
  WHERE s.avg_fragmentation_in_percent > 10
    AND v.index_id = COALESCE(@indexID,v.index_id)
    AND v.[table] = COALESCE(@tableName,v.[table])
    AND v.db = COALESCE(@DatabaseName,v.db)
  ORDER BY 
    DatabaseName,PercentFragment DESC;
END
GO

dawei

【声明】:乐山站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

您错过了

边缘运维精选工具链:数据整合驱动建站效能优化,reasoning_content:我们要求以边缘计算运维工程师的口吻,写一个与技术、科技相关,关于[精选工具链:驱动数据整合,优化建站效能]的标题直接输出一个标题,不要加说明,简短精炼,30字以内nn需要体现边缘计算运维工程师的身份特点,比如强调边缘、运维、工具链、数据整合、建站效能等可以结合边缘计算的特点:低延迟、分布式、实时处理标题风格可以技术化、有力nn可能的边缘工具链实战:数据整合加速建站效能或者:精选工具链驱动数据整合,优化边缘建站效能(这个可能超过30字?数一下:精选工具链驱动数据整合,优化边缘建站效能 - 共18个字,可以)但注意要体现边缘计算运维工程师的口吻,所以可以加入运维或边缘nn另一种:边缘运维工具链:数据整合提升建站效能或者:边缘数据整合利器,工具链优化建站太短不够完整nn考虑一个直接有力的:边缘运维精选工具链:数据整合驱动建站效能优化这个字数:边缘运维精选工具链:数据整合驱动建站效能优化 - 共16个字,可以nn更简洁:边缘工具链:数据整合优化建站效能14字nn但要求包含精选工具链:驱动数据整合,优化建站效能这个核心最好直接引用但稍作调整例如:精选工具链驱动数据整合,优化边缘建站效能18字nn注意精选工具链是固定的,那么标题可以是:精选工具链:驱动数据整合,优化建站效能这个正好是原句,但缺少边缘计算运维工程师的口吻可以加在开头:边缘运维:精选工具链驱动数据整合,优化建站效能这个也是18字,但冒号用法或者:边缘运维 | 精选工具链:驱动数据整合,优化建站效能带竖线也可nn为了更符合工程师口吻,可以写成:边缘运维实战:精选工具链驱动数据整合,优化建站效能20字nn或者:边缘计算运维:精选工具链驱动数据整合建站13字,但少了优化效能nn最终决定一个最合适:边缘运维精选工具链:数据整合驱动建站效能优化正好16字,精炼

性能工程师:全链路工具链整合提升建站效能,reasoning_content:我们要求以性能工程师的口吻,写一个与技术、科技相关,关于[优化导向工具链整合:全链路提升建站效能方案]的标题需要简短精炼,30字以内直接输出标题,不要加说明nn关键词:性能工程师、技术、科技、优化导向工具链整合、全链路、提升建站效能方案可以组合成类似:全链路工具链整合:性能工程师的建站效能提升方案 但需要更简洁nn可能的全链路工具链整合:性能工程师的建站效能提升 还是有点长或者:性能工程师打造全链路工具链,极致建站效能 但字数nn更精炼:全链路工具链整合:性能工程师的建站效能方案 (18字) 但方案重复了原文或者全链路工具链整合:性能优化提升建站效能 (18字) 但缺少性能工程师口吻nn要求以性能工程师口吻,可以写成:性能工程师:全链路工具链整合提升建站效能 (20字)或者工具链全链路整合:性能工程师的建站效能方案 (20字)注意不要超过30nn我想到:全链路工具链整合:性能工程师的效能提升方案 (19字)或者更技术:优化导向工具链全链路:性能工程师建站效能方案 (21字)nn最好包含科技或技术?题目说与'技术、科技'相关,可以加入一点科技感比如科技赋能:性能工程师全链路工具链整合方案 (20字)但方案可能多余直接科技赋能:性能工程师打造全链路工具链 (19字) 但缺少提升建站效能nn再考虑:性能工程师:全链路工具链整合,科技提升建站效能 (22字)有点长nn最简洁:全链路工具链整合:科技赋能建站效能 (16字) 但缺少性能工程师口吻可以在前面加性能工程师:变成性能工程师:全链路工具链整合科技赋能 (19字) 不太通顺nn更好的:性能工程师的科技利器:全链路工具链整合 (19字) 然后提升建站效能放后面?但字数可能超nn我决定采用:全链路工具链整合:性能工程师的建站效能科技方案 (21字) 有点啰嗦nn标准答案应简短有力参考类似标题常见格式:全链路工具链整合:性能工程师的效能提升之道 (19字)或者性能工程师:全链路工具链整合,建站效能最大化 (21字)nn个人偏好:性能工程师:全链路工具链整合提升建站效能 (20字) 很直接符合要求

Linux数据库环境速建与项目稳定运行指南,reasoning_content:我们要求以技术文档整理师的口吻,写一个与技术、科技相关的标题,主题是[Linux数据库环境快速搭建与项目稳定运行指南]需要简短精炼,30字以内直接输出标题,不要额外说明nn考虑几个方向:强调快速搭建、稳定运行、技术文档整理师的专业性可能的标题如:Linux数据库环境速建与项目稳定运行手册 或者 快速搭建Linux数据库环境,确保项目稳定运行指南注意字数nn一个简洁的版本:Linux数据库环境快速搭建与稳定运行指南 共16字或者加上技术文档整理的风格?但要求口吻是技术文档整理师,可以体现在标题中?不过标题本身不必写出口吻,只要符合即可可以更技术化:Linux数据库环境速建与项目稳定运行手册 16字nn或者:Linux数据库环境快速搭建与稳定运行实战指南 17字更精确:注意主题是[Linux数据库环境快速搭建与项目稳定运行指南],所以原样即可但要求是写一个标题,可以基于此nn我认为最直接: Linux数据库环境快速搭建与项目稳定运行指南 正好21字但可能长一点可以精简为:Linux数据库环境速建与稳定运行指南 15字nn为了更符合技术文档整理师,可以用速建手册或实操指南我选择:Linux数据库环境速建与项目稳定运行实操指南 19字nn最终输出一个标题,不加标点?可以不加