Hi,请  登录  或  注册

解决平台脚本生成标识ID卡在335不动问题:原理与脚本修改技巧

在部署某些互动娱乐平台时,我们通常需要运行一个名为 标识生成.sql 的脚本,用于预先生成平台运行所需的标识 ID。这些 ID 会作为用户编号、房间号或其他逻辑编号的唯一标识使用。

但很多人第一次运行时会发现一个“疑似Bug”的现象:

控制台数据显示生成到 335 后就不动了,好像卡住了一样。

其实,这并不是出错,而是脚本已完成关键写入动作,只是因为循环写入量大(默认 10 万),SQL 的执行线程还在等待资源释放。下面我们将讲清楚原理,并说明如何通过参数调整自定义生成数量。

一、“卡在 335”是完成标志,不是故障

生成标识卡在335时的控制台截图

上图所示,当标识 ID 一直打印到 335 停止,说明数据库插入操作已经全部完成,剩下的只是 SQL 脚本中的“休眠等待”或缓存写入部分。

这一阶段如果你强行关闭窗口,数据不会丢,但建议等候10~20分钟后再手动关闭控制台,确保事务提交完毕。

二、脚本默认配置说明

标识生成.sql 脚本中,通常会有如下变量声明:

默认脚本设置

解决平台脚本生成标识ID卡在335不动问题:原理与脚本修改技巧

SET @ReserveEnd = 100000
SET @BeginGameID = 1
SET @EndGameID   = 999999

含义如下:

  • @ReserveEnd:保留 ID 生成数(默认 10 万)

  • @BeginGameID:起始生成 ID

  • @EndGameID:最大生成 ID(999999 为默认上限)

所以,即便实际需求只用几千个,脚本也会一次生成 10 万个,这自然会导致运行缓慢,甚至触发数据库性能警告。

三、只生成1万个标识的修改方式

如果你只需要生成 1 万个标识,可以修改变量如下:

改为只生成一万的配置

解决平台脚本生成标识ID卡在335不动问题:原理与脚本修改技巧

SET @ReserveEnd = 1
SET @BeginGameID = 1
SET @EndGameID   = 10000

注意:

  • @ReserveEnd 设置为 1 是为了取消保留块功能,配合限定 EndGameID 达到控制总数量的目的

  • 改完后运行速度会非常快,一般几秒即可完成

四、生成表说明

生成结果会插入到如下表(或类似名称)中:

  • GameIdentifier

  • IdentTable

  • Base_IdentID

  • 或其他平台专属标识ID管理表

生成成功后,可以通过以下 SQL 检查数量是否正确:

SELECT COUNT(*) FROM GameIdentifier

或查看具体 ID 范围:

SELECT MIN(IdentID), MAX(IdentID) FROM GameIdentifier

五、可能导致假卡死的原因

如果不是“等待”,而是真的卡住,可从以下角度排查:

问题点 排查方式
事务未提交 查看 SQL Server 活动监视器是否有锁等待
表结构主键冲突 检查表中是否已有相同 ID(重复执行未清理)
脚本无限循环 确认 WHILE 逻辑没有设错 @EndGameID 范围
缓存未刷新 运行完成后 DBCC FREEPROCCACHE 可尝试释放
  1. 修改脚本生成范围为 1~10000

  2. 清空原始表(如果有旧数据):

    TRUNCATE TABLE GameIdentifier
    
  3. 运行脚本生成新标识

  4. 10~20分钟后确认任务完成,再关闭窗口或断开连接

  5. 查询验证生成是否正常

总结

标识生成脚本卡在335并不是错误,而是一个“完成即挂起”的正常逻辑现象。只需静候数分钟,任务即可完成。如果你只想生成指定范围的 ID,只需将脚本中的 @EndGameID 改成自己想要的值即可。

通过合理修改这段脚本,可节省大量部署时间,也能提升数据库性能。

文章名称:解决平台脚本生成标识ID卡在335不动问题:原理与脚本修改技巧
除非特别注明,本站所有文章均为原创,转载请注明出处:264玫瑰资源库
部分教程资源来源于互联网,请谨慎辨别广告内容,避免上当受骗!

评论 抢沙发

登录

找回密码

注册