千家信息网

自动管理分区

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,表分区的一个好处:能够避免Deadlock,分区之间是相互独立的,对一个分区加X锁,不会对其他分区产生contention。在项目中,有如下 Partition Function 和 Partitio
千家信息网最后更新 2025年12月01日自动管理分区

表分区的一个好处:能够避免Deadlock,分区之间是相互独立的,对一个分区加X锁,不会对其他分区产生contention。

在项目中,有如下 Partition Function 和 Partition Scheme

CREATE PARTITION FUNCTION [funcPartition_int_DataSourceID](int) AS RANGE LEFT FOR VALUES (1, 2, 3)CREATE PARTITION SCHEME [schePartition_int_DataSourceID] AS PARTITION [funcPartition_DataSourceID] TO ([PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY])create table dbo.dt_test(...More column definitionDataSourceID int)on [schePartition_int_DataSourceID](DataSourceID)

查看ETL的execution log,有时会发现 Deadlock Issue,对相关package Troubleshooting发现,发生deadlock的root cause是:同时更新表的两条语句产生contention,导致deadlock。仔细check代码,更新的两条查询语句都使用Partition Column(DataSourceID) 作为过滤条件。我推测,可能是这两个DataSourceID位于同一个Partition。

1,验证boundary value

select prv.function_id,pf.name,pf.boundary_value_on_right,prv.value as BoundaryValuefrom sys.partition_range_values prvinner join sys.partition_functions pf    on prv.function_id=pf.function_idwhere pf.name='funcPartition_int_DataSourceID'

BoundaryValue的值小于当前 DataSourceID的最大值,产生 contention的两个DataSourceID 在最右边的partition中。

随着项目数据的增加和人员的更替,缺少合理的管理计划,导致额外增加的DataSourceID都被分配到同一个partition中。
2,创建Job,自动分区

最佳实践,如果一个partition是non-empty,那么split range会导致data movement,这可能是一个非常耗费IO的一个process,为了避免extensive data movement,最好是预留一个empty partition,每次都从empty partition 中split range。

use db_studygodeclare @CurrentMaxBoundaryValue intdeclare @ExistingMaxDataSourceID intdeclare @BoudaryValue intselect @ExistingMaxDataSourceID = max(dds.DataSourceID)from dbo.dt_DataSource dds with(nolock)select @CurrentMaxBoundaryValue= max(cast(prv.value as int))from sys.partition_functions pf inner join sys.partition_range_values prv    on pf.function_id=prv.function_idwhere pf.name='funcPartition_int_DataSourceID'-- add new boundary valueif @CurrentMaxBoundaryValue<@ExistingMaxDataSourceID+1begin    set @BoudaryValue=@CurrentMaxBoundaryValue+1    DECLARE @SQL NVARCHAR(MAX)=N'ALTER PARTITION SCHEME [schePartition_int_DataSourceID]NEXT USED [PRIMARY]ALTER PARTITION FUNCTION [funcPartition_int_DataSourceID]()SPLIT RANGE ('    declare @ExecSql nvarchar(max)    set @ExecSql=''    while @BoudaryValue<=@ExistingMaxDataSourceID+1    BEGIN                SELECT @ExecSql = @SQL+ cast(@BoudaryValue as varchar(10))+ N')'        EXEC(@ExecSql)        set @BoudaryValue=@BoudaryValue+1    endend

本例将分区全部存放在Primary FileGroup, 如果需要将不同的Partition存储在不同的FileGroup,那么可以增加Create filegroup的代码。

3,在Job执行时,Issue an error

Executed as user: NT SERVICE\SQLSERVERAGENT. UNKNOWN TOKEN failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or filtered indexes and/or query notifications and/or XML data type methods and/or spatial index operations. [SQLSTATE 42000] (Error 1934). The step failed.

QUOTED_IDENTIFIER设置错误,添加下面的script,即可

SET QUOTED_IDENTIFIER  ON

参考:SET QUOTED_IDENTIFIER (Transact-SQL)

  1. SET QUOTED_IDENTIFIER must be ON when you are creating or changing indexes on computed columns or indexed views. If SET QUOTED_IDENTIFIER is OFF, CREATE, UPDATE, INSERT, and DELETE statements on tables with indexes on computed columns or indexed views will fail.

  2. SET QUOTED_IDENTIFIER must be ON when you are creating a filtered index.

  3. SET QUOTED_IDENTIFIER must be ON when you invoke XML data type methods.


不同 两个 代码 语句 项目 更新 管理 最大 之间 人员 右边 同时 好处 数据 最大值 最好 条件 错误 面的 分配 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 河南软件开发 工资待遇 保护无线网络安全的措施 服务器虚拟环境怎么搭建 合川网络安全产业城产业规划展示厅获奖 简历上写软件开发的小项目 宽带网络技术和物联网 什么是dns服务器地址 网络安全维护工作都做什么 三级网络技术用什么教材 网络安全隐患文章 阿里云云服务器如何备份 统计局网络安全政务信息 网络安全短动画一分钟 网络安全应急事件处置流程 戴尔服务器修改bios引导 宾馆处罚网络安全法相关的文章 电脑本地数据库句柄已损坏 北京 吉思网络技术有 关于网络安全进校园的内容 linux服务器架设教程 诈骗罪提供网络技术 app软件开发商收费多少 湖北什么是少儿编程平台软件开发 服务器linux外还有其他 网络安全法与军事联系 吉林大学数据库上机实验 声音服务器是什么 新沂辅助软件开发常见问题 网络安全分级教学什么意思 网络安全技术服务和产品
0