Sql server Sql server奇怪身份增量

Sql server Sql server奇怪身份增量,sql-server,azure-sql-database,Sql Server,Azure Sql Database,我在SQL Azure上设置了此表 CREATE TABLE [dbo].[Sl]( [ID] [int] IDENTITY(1,1) NOT NULL, [PublicId] [uniqueidentifier] NOT NULL, CONSTRAINT [PrimaryKey_ba033f1f-ac1b-4616-8591-fcd47fe0f63d] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF,

我在SQL Azure上设置了此表

CREATE TABLE [dbo].[Sl](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [PublicId] [uniqueidentifier] NOT NULL,
 CONSTRAINT [PrimaryKey_ba033f1f-ac1b-4616-8591-fcd47fe0f63d] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON),
 CONSTRAINT [PublicId_UNIQUE] UNIQUE NONCLUSTERED 
(
    [PublicId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)
非常奇怪的是,ID以一种意外的方式递增

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1011
1012
1013
1014
1015
1019
1020
1021
1022
1023
1024
1025
1026
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
4091
4092
4093
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
6091
6092
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
8091
8092
8093
8094
8095
8096
8097
9091
9097
9098
9099
9100
9101
9102
9103
9104
9105
9106
9107
9108
9109
9110
9111
9112
9113
9114
9115
9116
9117
10100
10117
10118
10119
10120
10121
10122
10123
10124
10125
10126
11126
11127
11128
11129
11130
11131
11132
11133
11134
11135
11136
11137
11138
11139
11140
11141
11142
11143
11144
11145
11146
12144
12145
12146
12147
12148
12149
12150
12151
12152
12153
12154
12155
12156
12157
12158
12159
12160
12161
12162
12163
12164
12165
12166
12167
12168
12169
12170
12171
12172
12173
12174
12175
12176
12177
12178
12179
12180
12181
12182
12183
13183
13184
13185
13186
13187
13188
13189
13190
13191
13192
13193
13194
13195
13196
13197
13198
13199
13200
13201
13202
13203
14202
14203
14204
14205
14206
14207
14208
14209
14210
14211
14212
14213
14214
15214
15215
15216
15217
15218
15219
15220
15221
15222
15223
15224
15225
15226
15227
15228
15229
15230
15231
15232
15233
16233
16234
16235
16236
16237
16238
16239
16240
16241
16242
16243
16244
16245
16246
16247
16248
16249
你知道如何正常地增加吗? 这样数字就不会像那样跳跃了? 你知道如何正常地增加吗?
这样数字就不会像那样跳跃了?

这是一个已知的问题。Connect上报告了两个相关项目。这一条实际上是按照设计关闭的,但我不认为留下评论的工程师真正理解这个问题:

此(早期!)错误处于活动状态:

后者有一个有趣的解决方法,其他方法让我大吃一惊。对于您自己的机器来说,主要的解决方法是很好的,但是祝您在Azure中运行跟踪标志(或者作为建议的连接项目之一创建启动过程)好运。使用不带缓存的序列可能是一种可行的选择,但您应该验证这种折衷是否值得避免在一个无意义的代理数字中出现空白。另一个答案是建议在每次插入后发出一个检查点。哎哟


最后,如果您想要一个没有间隙的序列,请停止使用
IDENTITY
——这不是它设计的目的。

这方面类似吗?有点类似,只是你在云中的选择非常有限。如果你以任何方式依赖
IDENTITY
列的数值,你就做错了。它们应该被视为不透明的blob(只有服务器才能识别行),并且可以方便地存储在数字列中。如果你依赖于“价值观”,那你就做错了。这是非常重要的upsetting@user3077725令人心烦,为什么?你有差距。了不起的事这些值不应该有任何意义,不管怎样,使用IDENTITY都无法真正避免差距,即使这个bug不存在。把它变成一个大点,忘掉它。它不会很快被修好。为什么它不会很快被修好呢?这真的不是一个缺陷吗?在我开始使用之前,我从未处理过这个问题azure@masteroleary出于性能方面的考虑,这一变化是经过设计的。我认为他们并没有完全预料到有多少人会受到影响,因为(a)有多少人依赖身份而无间隙(既没有明确记录,也没有隐含承诺)和(b)有多少人频繁重启服务器,以至于这成为一个问题。如果你想等待修复,那就去吧。与此同时,你要么停止关心任何大小的差距,要么实施一个变通办法。至于为什么有人会关心这些差距。我想使用基于身份的base-36值。有了间隙,用户输入的base-36代码的长度将增长得更快。我见过几个项目存储他们自己的身份/票据以分发(我认为在blob存储中增加一个值),但是锁定/性能呢?由于SQLAzure可以分发身份,我想我会使用它,但如果差距很大和/或频繁。。。?是否有更好的体系结构来分发独特的+1顺序票据?