Symptoms
Assume that you have a table that has a clustered columnstore index in Microsoft SQL Server 2014. You run a DDL query against the table to change the data type of an existing column. For example, you update the data type for Column_1 of Table_1 from VARCHAR (499) to NVARCHAR (500) by running the following command:
ALTER TABLE Table_1 ALTER COLUMN Column_1 NVARCHAR(500) NOT NULL
In this situation, multiple assertion failures occur, and you receive the following error message:
Location: <File Path>\xmcolenc.inl:413
Expression: PF_CURRENT_STATUS == PFS_OK (in XMColumnEncoder<unsigned char *>::EncodeValueForSecondary) SPID: <SPID> Process ID: <Process ID > Description: hr: 0x0 Location: <File Path>\xmerror.cpp:43 Expression: 0 (in PFSetLastError) SPID: <SPID> Process ID: <Process ID> Description: hr: 0x0Additionally, multiple memory dump files are generated in the SQL Server Error Log folder, and multiple error messages that resemble the following are logged in the SQL Server Error log:
<Date Time> spid<ID> ***Stack Dump being sent to <Disk Name>:\Program Files\Microsoft SQL Server\MSSQL12.SQL2014\MSSQL\LOG\SQLDump0002.txt
<Date Time> spid<ID> * ******************************************************************************* <Date Time> spid<ID>* <Date Time> spid<ID>* BEGIN STACK DUMP: <Date Time> spid<ID>* <Date Time> spid<ID> <Date Time> spid<ID>* Private server build. <Date Time> spid<ID>* <Date Time> spid<ID>* Location: <File Path>\xmcolenc.inl:413 <Date Time> spid<ID>* Expression: PF_CURRENT_STATUS == PFS_OK <Date Time> spid<ID>* (in XMColumnEncoder<unsigned char *>::EncodeValueForSecondary) <Date Time> spid<ID>* SPID: 60 <Date Time> spid<ID>* Process ID: 3680 <Date Time> spid<ID>* Description: hr: 0x0 <Date Time> spid<ID>* <Date Time> spid<ID>* Input Buffer 136 bytes - <Date Time> spid<ID>* ALTER TABLE Table_1 ALTER COLUMN COL1 NVARCHAR(500) NOT NULL;Resolution
After you apply this hotfix, you may receive the following new error message when the DDL query fails:
ALTER TABLE statement failed because a secondary dictionary reached the maximum size limit. Consider dropping the columnstore index, altering the column, then creating a new columnstore index
This fix also prevents the memory dump files from being generated in SQL Server Error Log. The issue was first fixed in the following cumulative updates of SQL Server:
Each new cumulative update for SQL Server contains all the hotfixes and all the security fixes that were included with the previous cumulative update. We recommend that you download and install the latest cumulative updates for SQL Server:
Status
Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the "Applies to" section.