I have a list with 16,000 items which does not exceed the manually increased List View Threshold of 20,000. The view I am looking at has a page size of 30 items and shows 20 columns. 8 of these columns are indexed. I am attempting to filter on any of the 20 columns at this is the result:
Scenario 1:
- Filter drop down clicked on "Title" column which has approximately 16,000 unique values. This column is not indexed.
- "Loading..." is shown indicating that filter choices are being loaded.
- Two minutes and 55 seconds later, "Show Filter Choices" appears and is clicked.
- One minute and 50 seconds later, an unexpected error occurs.
From the ULS logs I am able to ascertain that a timeout occurred and the thread was aborted. Thread abort stack:
System.Threading.ThreadAbortException: Thread was being aborted.
at SNIReadSync(SNI_Conn* , SNI_Packet** , Int32 )
at SNINativeMethodWrapper.SNIReadSync(SafeHandle pConn, IntPtr& packet, Int32 timeout)
at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
at System.Data.SqlClient.TdsParserStateObject.ReadBuffer()
at System.Data.SqlClient.TdsParserStateObject.ReadByteArray(Byte[] buff, Int32 offset, Int32 len)
at System.Data.SqlClient.TdsParserStateObject.ReadString(Int32 length)
at System.Data.SqlClient.TdsParser.ReadSqlStringValue(SqlBuffer value, Byte type, Int32 length, Encoding encoding, Boolean isPlp, TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.ReadSqlValue(SqlBuffer value, SqlMetaDataPriv md, Int32 length, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.ReadColumnData()
at System.Data.SqlClient.SqlDataReader.ReadColumn(Int32 i, Boolean setTimeout)
at System.Data.SqlClient.SqlDataReader.GetSqlString(Int32 i)
at System.Data.SqlClient.SqlDataReader.GetChars(Int32 i, Int64 dataIndex, Char[] buffer, Int32 bufferIndex, Int32 length)
at Microsoft.SharePoint.SPSqlClient.setMappedOleDBTypes(Object[]& row, UInt16[] columnTypes, SqlDataReader reader)
at Microsoft.SharePoint.SPSqlClient.ExecuteQueryInternal(Boolean retryfordeadlock)
at Microsoft.SharePoint.SPSqlClient.ExecuteQuery(Boolean retryfordeadlock)
Scenario 2:
- Filter drop down clicked on "Category" column which has 8 unique values. This column is indexed.
- "Loading..." is shown indicating that filter choices are being loaded.
- Two minutes and 40 seconds later, 8 filter choices are shown.
- A filter is clicked and successfully applied in 5 seconds.
These performance problems make the system unusable. Our application has extensive custom development, but not in this particular feature. What is causing the poor performance? What could I use to locate the bottleneck?