SQLIOSim, like its predecessor SQLIOStress, is designed to read pages it has written and validate the data. SQLIOSim does this using a checksum algorithm.
Auditing reads are issued at various intervals to validate the checksum. There are two angles to checksum validation.
The SQLIOSim error log contains an error message sequence such as the following.
<ENTRY TYPE='ERROR' TIME='17:21:48' DATE='03/04/08' TID='5080' User='CPU Idle User' File='e:\yukon\sosbranch\sql\ntdbms\storeng\util\sqliosim\buffer.cpp' Line='791' Func='CBUF::ValidateBuffer' HRESULT='0x80070467' SYSTEXT='While accessing the hard disk, a disk operation failed even after retries.'> <EXTENDED_DESCRIPTION>Buffer validation failed on F:\sqliosim.mdx Page: 87366, offset 0x8</EXTENDED_DESCRIPTION> </ENTRY>
<ENTRY TYPE='ERROR' TIME='17:21:48' DATE='03/04/08' TID='5080' User='CPU Idle User' File='e:\yukon\sosbranch\sql\ntdbms\storeng\util\sqliosim\buffer.cpp' Line='791' Func='CBUF::ValidateBuffer' HRESULT='0x80070467' SYSTEXT='While accessing the hard disk, a disk operation failed even after retries.'>
<EXTENDED_DESCRIPTION>Buffer validation failed on F:\sqliosim.mdx Page: 87366, offset 0x8</EXTENDED_DESCRIPTION>
</ENTRY>
When a significant error is detected a text file is created showing extended details. In this case the error information shows SQLIOSim encountered a checksum failure and attempted 15 retries. Each retry does a sleep between retry attempts. After the 16 total reads the problem could not be resolved and the extended text file dump is generated.
<ENTRY TYPE='ERROR' TIME='17:21:48' DATE='03/04/08' TID='5080' User='CPU Idle User' File='e:\yukon\sosbranch\sql\ntdbms\storeng\util\sqliosim\page.cpp' Line='1043' Func='ErrorDumpHandler' HRESULT='0x00000000' SYSTEXT=''> <EXTENDED_DESCRIPTION>Dump file successfully written: H:\SQLIOSimX86\SqlSimErrorDump00006.txt</EXTENDED_DESCRIPTION> </ENTRY>
<ENTRY TYPE='ERROR' TIME='17:21:48' DATE='03/04/08' TID='5080' User='CPU Idle User' File='e:\yukon\sosbranch\sql\ntdbms\storeng\util\sqliosim\page.cpp' Line='1043' Func='ErrorDumpHandler' HRESULT='0x00000000' SYSTEXT=''>
<EXTENDED_DESCRIPTION>Dump file successfully written: H:\SQLIOSimX86\SqlSimErrorDump00006.txt</EXTENDED_DESCRIPTION>
The text file contains several sections which I have outlined below. To assist in interpreting the output it helps to understand the page header definition.
DWORD m_dwPage; DWORD m_dwFile; DWORD m_dwPageSeed; DWORD m_dwCheckSum;
DWORD m_dwPage;
DWORD m_dwFile;
DWORD m_dwPageSeed;
DWORD m_dwCheckSum;
I used the following page to illustrate the information here. 87366 = 0x00015546 or byte swapped 46 55 01 00
I used the following page to illustrate the information here.
87366 = 0x00015546 or byte swapped 46 55 01 00
This is an example of the stale read (stable media returned previous version of the page) showing the differences are the seed and checksum and all the rest of the data. Other conditions may be issues such as a single bit damaged on the page, swapped 512 sectors or even the wrong page (offset) returned.
The raw dump of the data as read from stable media.
0x000000 46 55 01 00 00 00 00 00 66 1A 00 00 52 11 D7 31 C4 D7 68 54 52 44 98 F1 32 0D 81 F7 49 81 90 D3 FU......f...R..1..hTRD..2...I...
0x000020 21 14 B9 B7 F5 9E AB 77 11 FC 7C 99 47 4B 11 D5 B2 68 3A 86 50 3E 68 CE 95 61 9E BB 7B C1 24 08 !......w..|.GK...h:.P>h..a..{.$.
0x000040 78 54 68 48 73 92 9A 4F BB 79 83 CE B1 FE 68 D4 67 C0 5B 0A 3C 61 AB 04 D1 39 EF CE F5 D9 AB 74 xThHs..O.y....h.g.[.<a...9.....t
These types of failures are typically configuration or hardware related. When you encounter such issues be sure to contact your operations and hardware vendors.
Bob Dorr SQL Server Senior Escalation Engineer
Kevin gives a run-down of the dozens of SQL Server topics (and other topics) he's been trying to stay on top of.
This is an extension to by previous post about SQLIOSim data integrity testing. http://blogs.msdn.com/psssql/archive/2008/03/05/how-it-works-sqliosim-checksums.aspx
I'v got the following error:
Data mismatch between the expected disk data and the read buffer:
File: G:\sqliosim.mdx
Offset: 0xFBB6C000
Expected FileId: 0x1
Received FileId: 0x0 (does not match expected)
Expected PageId: 0x7DDB6
Received PageId: 0xC6E94000 (does not match expected)
Received CheckSum: 0xEA72F2CC
Calculated CheckSum: 0xEA72F2CC
Received Buffer Length: 0x2000
Received and calculated checksums are equal but fieldid and pageid are wrong. Could anyone explain me what is wrong? Or maybe someone could point me right place to ask this question.