
示例工程数据库教程后端【免费下载链接】sql-server-samplesAzure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge项目地址https://gitcode.com/gh_mirrors/sq/sql-server-samples点击查看免费下载SQL Assessment API 通过一组探测Probe从目标 SQL Server 实例和数据库中采集数据再由规则Rule对数据逐行判定最佳实践是否被违反。本文聚焦其中最常用、最灵活的T-SQL Probe类型代码为SQL它用一段 T-SQL 查询从动态管理视图DMV、系统目录等元数据源取值供评估引擎进一步分析。读完本文你将掌握 T-SQL Probe 的完整 JSON 定义query、UseDatabase、timeout参数、目标匹配Target Pattern与数据变换parse机制并能参照仓库中的真实样例编写属于自己的自定义探测与检查规则。本文对应的原始文档为 TSQLProbes.md并配合仓库内 Probe.md、RulesandProbes.md、TargetPattern.md、DataTransformation.md 以及 CustomRuleTSQLProbe.json 等文件展开。T-SQL Probe 是什么按官方文档的定义Probes/README.mdSQL Assessment API 提供了多种类型的 Probe 来为评估采集数据数据既可以来自 SQL Server 的动态管理视图也可以来自操作系统层面例如 Windows 注册表。T-SQL Probe 是其中基于 T-SQL 查询的一种Type code:SQLT-SQL probes are based on T-SQL queries used to retrieve data from the specified databases for further assessment of your environment.也就是说T-SQL Probe 的核心就是一段 T-SQL 查询评估引擎针对匹配的目标服务器或数据库执行该查询把返回的每一行、每一个命名列作为后续规则判断的输入变量。默认规则集Default Ruleset中的绝大多数 Probe 都是 T-SQL 类型的例如读取服务器属性、更新日志等元数据。在 Probe 的整体结构中详见 Probe.md一个 Probe 是 JSON 中的一个属性属性名即 Probe ID供 Check 引用属性值是一个 Probe 实现implementation的数组。评估引擎会按数组顺序选择第一个 target 匹配的实现因此实现的排列顺序非常重要同一个 Probe 可以由 T-SQL 与 CLRExternal等不同实现混编以适配不同版本的 SQL Server。例如某些 DMV 在 SQL Server 各版本间并不一致多实现正是为了按版本提供最合适的查询。无副作用设计原则文档明确要求 Probe 应被设计为无副作用的函数引擎调用 Probe 的顺序是不确定的引擎可能为了优化目标 SQL Server 的负载而重排调用顺序当没有任何 Check 需要某个 Probe 的数据时该 Probe 根本不会被调用默认规则集的 Probe 只读取元数据更新日志、服务器属性等不会读取表内的用户数据也不会向数据库或实例写入任何内容Probe 不会设置任何标志flag或属性。这些约定是编写自定义 T-SQL Probe 时必须遵守的安全与性能底线Probe.md。安全责任最终在规则/Probe 作者一方JSONConfiguration.md 同样强调 Security is the user responsibility。Implementation 属性query、UseDatabase 与 timeoutT-SQL Probe 的implementation部分包含以下参数表格为原文档 TSQLProbes.md 的完整内容参数必填类型默认值说明queryRequiredStringT-SQL 查询UseDatabaseOptionalBoolfalse是否在执行查询前发出USE DATABASE语句用于目标为数据库的 ProbetimeoutOptionalNumber30设置命令执行的超时时间秒三个参数的实践要点query必填是 Probe 的数据来源。查询可以引用参数名参数由 Check 中的 Probe 引用通过params传入详见下文Probe 引用一节。仓库示例中的查询通常使用(NOLOCK)提示以减少对目标系统的锁影响。UseDatabase可选默认false。当 Probe 的目标是某个具体数据库target.type为Database且查询需要在该数据库上下文中执行例如访问dbo.sysfiles时需要设为true引擎会先发出USE DATABASE再执行查询。参考 CustomRuleTSQLProbe.json 中数据库空间检查的例子下文有完整展开。timeout可选默认 30 秒。控制单条查询的执行超时避免慢查询拖垮整个评估流程。一个完整的 T-SQL Probe 定义示例原文档给出如下完整示例必须原样继承理解该 Probe 针对运行在 Linux 上的、版本号 ≥ 11.0 的本地OnPremises服务器查询sys.dm_os_host_info获取主机平台与发行版本并用parse变换把host_release字符串解析出主版本、次版本、内部版本与修订号等命名分组。{ type: SQL, target: { type: Server, engineEdition: OnPremises, platform: Linux, version: [11.0,) }, implementation: { query: SELECT [host_platform] AS [host_platform] ,[host_release] AS [host_release] ,64 AS [host_architecture] FROM sys.dm_os_host_info(NOLOCK), transform: { type: parse, map: { host_release: /^(?major\\d)\\.(?minor\\d)(?:\\.(?build\\d))?(?:\\.(?revision\\d))?$/x } } } }逐字段解读typeSQL声明这是 T-SQL 类型 Probe。完整的类型清单见 Probe.md 中的表格包括AzGraphAzure Resource Graph 的 Kusto 查询、AzMetadataAzure 实例元数据服务的 JSONPath、CMD命令行脚本、External任意 .NET 代码、PowerShell、Registry、SQL、WMI。target目标匹配模式决定该实现适用于哪些对象。此处要求对象类型为 Server、引擎版本为 OnPremises、平台为 Linux、SQL Server 版本号落在[11.0,)区间即 11.0 及以上含 11.0。多实现按数组顺序匹配第一个匹配的实现被选中因此要按从特殊到通用的顺序排列实现。implementation.querysys.dm_os_host_info是 SQL Server 201711.0 之后为 14.0 主版本号体系……实为版本区间表达起提供的 DMV返回主机平台与发行版信息。示例中把host_architecture直接固化为常量64说明 Probe 查询可以输出常量列。implementation.transformparse数据变换用带命名分组major、minor、build、revision的正则表达式把host_release形如10.0.19044.2006拆解为host_release.major、host_release.minor等新变量供规则条件直接引用而无需在 T-SQL 里做字符串解析。target 匹配Probe 何时被选中T-SQL Probe 与规则一样通过 TargetPattern.md 定义的 JSON 目标模式筛选适用对象。目标模式的所有属性均可选省略某属性即表示匹配任意值。常用属性包括属性说明与可选值typeServer、Database可逗号分隔的列表。Check 的目标总是 Server 或 DatabaseProbe 常两者皆需engineEditionPersonalOrDesktopEngine、Standard、Enterprise、Express、AzureDatabase、DataWarehouse、StretchDatabase、ManagedInstance短名Azure与SqlServer分别代表云上各版与本地各版platformWindows、LinuxmachineTypePhysical、AzureVm、Hypervisor、Otherversion版本区间列表遵循 NuGet 版本区间格式如[11.0,)表示 11.0 及以上[13.0.5026.0, 14.0)等name/serverName字符串模式支持正则表达式斜杠包裹如/win.*/i、精确字符串或{not: ...}取反版本区间的完整匹配规则TargetPattern.md版本区间匹配含义10.0精确匹配 10.0[10.0, 13.0]10.0 到 13.0含端点10.0、10.50、11.0.345、13.0(10.0, 13.0)10.0 到 13.0不含端点10.50、11.0.345[10.0, 13.1)含左端点、不含右端点[10.0,)10.0 及以上含 10.0(,10.0]10.0 及以下含 10.0版本范围要求至少由主版本.次版本两个数字构成如11.0。正则在默认情况下不区分大小写如需区分大小写可在结尾斜杠后加c选项例如/win.*/c。正则选项沿用 .NET 正则引擎的选项约定仓库文档内部引用此处仅作文字说明不再提供外部链接。数据变换transform让 T-SQL 输出更易于规则判断T-SQL Probe 的输出经常不是规则条件最顺手的形态此时可以在implementation或 ProbeReference.md 的transform中叠加数据变换。官方文档 DataTransformation.md 给出了与上文同源的例子查询sys.dm_os_host_info返回的host_release是形如10.0.19044.2006的字符串虽然可以在 T-SQL 里解析但用变换能让代码更可读、更易维护implementation: { query: SELECT host_platform, host_release FROM sys.dm_os_host_info, transform: { type: parse, map: { host_release: /^(?major\\d)\\.(?minor\\d) } } }parse 变换的详细规则parse变换的完整参数与行为见 parse.md参数必填类型说明map必填Map为变量设置正则表达式flatten可选bool开启后将后续多行的解析字段合并用于多行数据行join可选string将所有行的字符串用指定分隔符连接为一行命名分组输出新变量Map 中每个属性为同名变量设定正则正则里的命名分组(?name...)会生成名为原始变量名.分组名的新变量如host_release.major。多匹配展开当一个正则在一行中有多个匹配时会为每个匹配生成新行若想把部分匹配打包回一行可用flatten仅保留解析生成的字段或join仅保留 Map 中提到的变量用分隔符连接所有行。性能建议官方文档建议在正则结尾使用x选项开启 Explicit Captures仅命名捕获以改善内存占用与性能例如/(?int\d)/x。变换还可以放在 Probe 引用Probe Reference上实现复用当某个 Check 需要对同一指标取平均值、另一个 Check 需要对同一指标取最大值时两者可引用同一个 Probe但各自应用自己的变换——这样 Probe 只被调用一次既复用了代码也复用了数据DataTransformation.md。实战编写一个面向数据库的 T-SQL Probe 与检查规则仓库的 CustomRuleTSQLProbe.json 提供了一个开箱即用的自定义规则集样例其中就包含一个完整的 T-SQL Probe——检查数据库文件剩余空间。下面完整展开该文件{ schemaVersion: 1.0, version: 1.1, name: Custom Ruleset, rules:[ { target: { type: Database, engineEdition: OnPremises, ManagedInstance, version: [ [11.0,11.0.7001.0), [12.0,12.0.6259.0), [13.0,) ], platform: [ Windows, Linux ] }, id: DBSpaceAvailable, itemType: definition, displayName: Database files have little free space, description: Average available space in all the database files is less than the threshold., message: Database has only {space_available_rel:P0} of free space (threshold is set to {threshold:P0}). Total space: {space_total:N2} MB. Free space: {space_available:N2} MB, probes: [DBSpaceAvailable], threshold: 0.25, condition: { greater: [ space_available_rel, threshold ] } } ], probes:{ DBSpaceAvailable: [ { type: SQL, target: { type: Database, engineEdition: OnPremises, ManagedInstance, platform: [ Windows, Linux ] }, implementation: { useDatabase: true, query: SELECT (total - used)/total AS space_available_rel, total as space_total, used as space_used, total - used as space_available FROM ( SELECT SUM(a.size)/128.0 AS total, SUM(fileproperty(a.name,SpaceUsed))/128.0 AS used FROM dbo.sysfiles a WHERE groupid 0)data; } } ] } }逐层拆解这个实战样例Probe 定义probes节Probe ID 为DBSpaceAvailable类型SQL目标为Database类型的本地版/托管实例OnPremises、ManagedInstance平台覆盖 Windows 与 Linux。useDatabase: true因为查询访问的是目标数据库内的dbo.sysfiles必须先把上下文切到该数据库再执行——这正是原文档中UseDatabase参数的典型应用场景。查询输出变量space_available_rel、space_total、space_used、space_available四个命名列即规则条件可引用的变量。规则rules节itemType为definition新建检查id为DBSpaceAvailable通过probes: [DBSpaceAvailable]引用上述 Probethreshold为 0.25检查参数可在表达式中以threshold引用condition用greater运算符比较space_available_rel与threshold——当剩余空间占比大于阈值时不触发建议否则生成推荐消息。消息模板message中的{space_available_rel:P0}、{space_total:N2}形式支持 .NET 格式字符串P0 为百分比、N2 为保留两位小数由引擎在渲染时替换为变量值参见 JSONConfiguration.md 中对 message 与变量引用的说明。注意规则与 Probe 的target可以不完全一致规则控制检查出现在哪些对象的清单上而 Probe 的 target 决定用哪个实现取数。多个规则可通过itemType: override修改既有检查例如调整limit、threshold或enabled其工作方式详见 RulesandProbes.md。Probe 引用进阶alias、params 与跨 Probe 传参当 Check 需要带参数多次调用同一 Probe或把一个 Probe 的输出传给另一个 Probe 时需要使用 Probe 引用对象完整机制见 ProbeReference.mdalias为该次引用起别名。多次引用同一id时用别名::变量名形式区分不同结果例如FirstDisk::FreeSpace。params传给 Probe 的参数属性值可以是任意表达式包括常量、全局/局部变量以及其它 Probe 的输出。transform在该次引用上叠加数据变换。官方文档给出了一个跨 Probe 传参的典型例子DatabaseMasterFilesProbe 找出目标数据库使用的所有磁盘卷 ID随后AzStorageProbe 以path: db_files::volume_id把前者的输出作为参数传入逐卷补充 Azure 存储相关属性。这种链式取数让 T-SQL Probe 的输出可以驱动云资源类 Probe是整个评估管线的关键粘合机制。加载自定义规则集并运行评估将编写好的规则集如上述 JSON保存后即可通过 PowerShell 的 SqlServer 模块运行评估。仓库 QuickStart.md 给出了两条核心命令Install-Module -Name SqlServer -AllowClobberGet-SqlInstance -ServerInstance localhost | Invoke-SqlAssessment对本地实例的所有数据库做评估Get-SqlDatabase -ServerInstance localhost | Invoke-SqlAssessment评估结果中每个建议Recommendation都带有严重级别Info/Low/Medium/High、推荐消息Message、检查 IDCheck ID以及来源规则集与版本Origin如Microsoft Ruleset 0.1.202需要更深入的信息时可查看HelpLink属性。完整的规则与属性清单可查阅仓库根部的 ruleset.json 与 DefaultRuleset.csv——默认规则集中的多数检查正是由 T-SQL Probe 供数的是学习现成查询写法的最佳素材。若希望基于现有规则做更复杂的自定义例如按版本/版本号区间叠加实现、引入requires/runFor功能要求可继续阅读 ProbeRequirements、CreatingCustomRules 以及 SQLAssessmentAPITutorialNotebook.ipynb。编写 T-SQL Probe 的要点回顾最小三要素type: SQLtarget适用对象implementation.query取数查询视需要开启UseDatabase与调整timeout。只读无副作用仅查询元数据DMV、系统目录不读写用户数据不做任何状态修改。版本兼容靠多实现按 target 的version区间排列多个实现引擎取第一个匹配者。输出即变量查询返回的列名就是规则表达式中可用的变量名配合parse/flatten/join变换可把字符串、多行结果整理成规则最友好的形态。引用即复用通过 Probe Reference 的alias、params、transform实现同 Probe 多参数调用与跨 Probe 数据传递。赞分享示例工程数据库教程后端【免费下载链接】sql-server-samplesAzure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge项目地址https://gitcode.com/gh_mirrors/sq/sql-server-samples点击查看免费下载相关推荐Hap QuickTime视频编码器实现10倍性能提升的硬件加速视频编解码架构设计指南Hap QuickTime视频编码器实现10倍性能提升的硬件加速视频编解码架构设计指南 Hap QuickTime视频编码器是一款专为现代图形硬件优化的开源视示例工程数据库教程后端如何快速上手nbterm10个实用技巧让终端笔记本操作更简单如何快速上手nbterm10个实用技巧让终端笔记本操作更简单 想要在终端中高效地使用Jupyter Notebooks吗nbterm是你的终极解决方案这款示例工程数据库教程后端重塑简历制作体验Reactive-Resume如何让专业简历设计变得简单高效重塑简历制作体验Reactive Resume如何让专业简历设计变得简单高效 在求职市场竞争日益激烈的今天一份精心设计的简历往往是打开职业大门的关键。然而示例工程数据库教程后端上一篇DevUI核心组件详解50企业级组件完全解析下一篇HDiffPatch内存管理指南如何在大文件场景下控制内存使用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考