SQLStreamStore icon indicating copy to clipboard operation
SQLStreamStore copied to clipboard

Add WITH (ONLINE=ON) to MS SQL indexes creation

Open MNF opened this issue 3 years ago • 1 comments

If we upgrade V2 to V3, we have existing database with millions of record and creating index may be time-consuming. To anticipate it, Indexes IX_Streams_IdOriginal and IX_Streams_IdOriginalReversed (and other indexes as well) better to specify WITH (ONLINE=ON) https://github.com/SQLStreamStore/SQLStreamStore/blob/80189cdac3151d5f990600567953ea3be9dad4a2/src/SqlStreamStore.MsSql/ScriptsV3/CreateSchema.sql#L37

Unfortunately it is required to add conditional logic as not all sql server editions support WITH (ONLINE) https://stackoverflow.com/questions/50407490/how-to-create-nonclustered-index-with-online-if-available

Btw, even WITH (ONLINE=ON) may cause blocks on the final stage https://dba.stackexchange.com/questions/41181/why-does-create-index-with-online-on-block-access-to-the-table-over-a-period/50139#50139

MNF avatar Jun 18 '22 00:06 MNF

When I created the index, I got

Warning! The maximum key length for a nonclustered index is 1700 bytes. The index 'IX_Streams_IdOriginal' has maximum length of 2004 bytes. For some combination of large values, the insert/update operation will fail.

Does it mean, that MS SQL in reality support not more than 848 characters, not 1000 as declared in schema? (it's not a problem for my IdOriginal values)