转:SqlServer2012自增列值突然增大1000的原因及解决方法

yizhihongxing

转:SqlServer2012自增列值突然增大1000的原因及解决方法

最近有些开发者反馈他们使用SqlServer2012时,数据库表的自增列突然增大了1000个,这对于表中数据量较大的情况下显得异常夸张,特此总结原因及解决方法。

问题原因

主要原因就是Sql Server 2012在自增列管理上的性能优化,当自增列的当前值被完全使用时,SqlServer会分配一个段值到内存当中,以此来加快查询性能。然而,当SqlServer重启之后,该自增列将重新在数据库中分配一个自增值段,而且这有可能比之前的段更大。因此,在SqlServer重启之后,你将会看到自增列的值突然增大1000个以上。下面说明一下该行为发生的机制。

当我们向表中插入数据,而自增列值超出了分配的段值范围,SqlServer会重新向表所分配的一个配置表中申请一段段值,此时这个自增长值变大了。而且在接下来正常的插入操作中,SqlServer不会去修改之前已经分配的段值,所以自增长的序列将被输出为新分配的段的值。

解决方法

总的来说,有两个方法解决该问题:

1. DBCC CHECKIDENT命令

这是一个检查Identity列的状态、并重新设置Identity列的值的命令。我们可以使用以下命令将Identity列的当前值设置为你所期望的值:

DBCC CHECKIDENT ('表名', RESEED, 开始的值)

例如,我们需要将一个表的自增列从1000开始重新设置,可以执行以下命令:

DBCC CHECKIDENT ('TableName', RESEED, 1000)

2. 使用DBCC UPDATEUSAGE命令

当使用DBCC CHECKIDENT时,数据库引擎会在sys.identity_columns视图中记录重新设置的值。从另一方面来看,只有表的Identity列需要重新设置时,使用DBCC UPDATEUSAGE才是更合适的命令。

使用示例:

DBCC UPDATEUSAGE (0, 'TableName')

执行上述脚本之后,SqlServer将重新计算表中各列的使用情况(上下文),使得Identity列的值得到更新。

最后,对于该问题的解决方法,还需做到:事前预先设置Identity列的范围,事中跟踪导致Identity列突然增大的原因。这样可以节省数据维护的工作量和资源投入。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:转:SqlServer2012自增列值突然增大1000的原因及解决方法 - Python技术站

(0)
上一篇 2023年3月28日
下一篇 2023年3月28日

相关文章

  • 苹果正式发布iOS 12.4.5 正式版 固件版本号为16G161(附更新方法)

    以下是关于“苹果正式发布 iOS 12.4.5 正式版,固件版本号为 16G161”的完整攻略,包含了两个示例说明。 更新方法 要更新到 iOS 12.4.5 正式版,可以按照以下步骤进行: 确保你的设备已连接到互联网。 打开设备的设置应用程序。 滚动并点击“通用”。 点击“软件更新”。 如果有可用的更新,点击“下载并安装”。 输入设备的密码(如果需要)。 …

    other 2023年8月2日
    00
  • 如何正确控制springboot中bean的加载顺序小结篇

    下面是关于如何正确控制Spring Boot中bean的加载顺序的攻略: 问题背景 在使用Spring Boot进行开发时,可能会遇到多个bean之间存在依赖关系的情况,而这些bean的加载顺序会影响程序的正确性。本篇攻略就是为了解决这个问题而准备的。 解决方案 方案1:使用@DependsOn注解 在Spring中,使用@DependsOn注解可以控制be…

    other 2023年6月27日
    00
  • 小白学python——用百度翻译api实现翻译功能

    小白学Python——用百度翻译API实现翻译功能 作为一名新手程序员,学习Python是必不可少的。在学习Python过程中,我们需要通过解决实际问题来掌握这门语言。一个实例就是在Python程序中使用API进行翻译。 什么是API API,全名Application Programming Interface,是软件系统之间互相通信和交互的一种方式。 它…

    其他 2023年3月28日
    00
  • javascript 原型链维护和继承详解

    下面我将详细讲解“JavaScript原型链维护和继承详解”的完整攻略。 理解原型链 在JavaScript中,每个对象都有一个原型对象,它是一个对象或null。一个对象的原型对象也有自己的原型对象,以此类推,最终指向null。这种关系被称为“原型链”。每个函数在创建时也会有一个原型对象,它会在实例化该函数时赋值给该实例对象的原型。 原型继承 JavaScr…

    other 2023年6月27日
    00
  • Flutter利用注解生成可自定义的路由的实现

    下面是Flutter利用注解生成可自定义的路由的实现的完整攻略: 1. 简介 Flutter是一款非常流行的跨平台移动应用开发框架,它支持运算绘制,并为开发者提供了丰富的组件和工具,使得开发移动应用变得更加简单。Flutter的路由是实现多个页面之间的导航的重要组成部分。在本篇文章中,我们将介绍利用注解(Annotation)生成可自定义路由的实现,以增强F…

    other 2023年6月27日
    00
  • windows安装adb方法及问题解决

    以下是关于Windows安装ADB的方法及问题解决的攻略: 下载ADB 首先,需要从官方网站下载ADB。下载地址为:https://developer.android.com/studio/releases/platform-tools 安装ADB 将下载的ADB压缩包解压到任意目录,例如C:\adb。然后,将该目录添加到系统环境变量中。具体步骤如下: 在W…

    other 2023年5月8日
    00
  • PHP对象递归引用造成内存泄漏分析

    下面我将为您详细讲解“PHP对象递归引用造成内存泄漏分析”的完整攻略: 现象描述 当PHP对象中存在递归引用时,循环引用会造成内存泄漏,最终导致程序崩溃。 问题分析 PHP中的对象在递归过程中,如果存在相互引用,会导致内存无法释放,最终导致内存泄漏。 例如,下面的代码创建了两个对象,并在这两个对象之间形成了循环引用: class A { public $b;…

    other 2023年6月27日
    00
  • pycharm配置autopep8 自动格式化python代码

    PyCharm配置Autopep8自动格式化Python代码 在进行Python开发时,代码的可读性非常重要,因为它不仅能让你更快地找到错误,还可以使代码易于理解和维护。其中一个关键方面是代码格式化,它可以使代码更易于阅读和理解。 在Python社区中,Autopep8是一种广为人知的代码格式化工具,它可以自动将Python代码转换为标准风格。本文将介绍如何…

    其他 2023年3月29日
    00
合作推广
合作推广
分享本页
返回顶部