sql >> データベース >  >> RDS >> Sqlserver

ADO.Net SQLCommand.ExecuteReader()の速度が低下するか、ハングする

    私たちは何ヶ月も同様の問題をデバッグしようとしてきましたが、ついに今日それを追跡しました...

    キャッシュに隠されていたクエリがありました(ToList / ToArrayなどを呼び出すことなく)。クエリは、その後クリーンアップされた接続に効果的に関連付けられ、ReadSniから100%CPUブロッキングのように見えるものが得られました。 (以下にフルスタックが含まれています)。

    クエリがLinqを使用するように変更される前に(代わりにList<T>を返すために使用される)キャッシュコードが記述されたと思われます。 、ただし、IEumberableとしてキャストします )そのため、誰かがデータアクセスを「怠惰」にしたときに導入されました。

    なぜそれが本番環境で数日おきにしか起こらなかったのか説明できません。キャッシングがあまり使用されていないか、接続がこのように失敗するために特定の状態にある必要がありました。

    OS Thread Id: 0x20b8 (27)
    Child SP IP       Call Site
    16edd0fc 6184267e System.Data.SqlClient.TdsParserStateObject.ReadSni(System.Data.Common.DbAsyncResult, System.Data.SqlClient.TdsParserStateObject)
    16edd134 61842624 System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
    16edd144 618446af System.Data.SqlClient.TdsParserStateObject.ReadBuffer()
    16edd150 61c583d0 System.Data.SqlClient.TdsParserStateObject.CleanWire()
    16edd15c 61d1beb9 System.Data.SqlClient.TdsParser.Deactivate(Boolean)
    16edd174 6184995f System.Data.SqlClient.SqlInternalConnectionTds.InternalDeactivate()
    16edd180 61849640 System.Data.SqlClient.SqlInternalConnection.Deactivate()
    16edd1b0 61849587 System.Data.ProviderBase.DbConnectionInternal.DeactivateConnection()
    16edd1e4 61849405 System.Data.ProviderBase.DbConnectionPool.DeactivateObject(System.Data.ProviderBase.DbConnectionInternal)
    16edd224 61849384 System.Data.ProviderBase.DbConnectionPool.PutObject(System.Data.ProviderBase.DbConnectionInternal, System.Object)
    16edd26c 6184920c System.Data.ProviderBase.DbConnectionInternal.CloseConnection(System.Data.Common.DbConnection, System.Data.ProviderBase.DbConnectionFactory)
    16edd2ac 618490f7 System.Data.SqlClient.SqlInternalConnection.CloseConnection(System.Data.Common.DbConnection, System.Data.ProviderBase.DbConnectionFactory)
    16edd2c4 618393bf System.Data.SqlClient.SqlConnection.Close()
    16edd304 11238f0a NHibernate.Connection.ConnectionProvider.CloseConnection(System.Data.IDbConnection)
    16edd340 11238eae NHibernate.Connection.DriverConnectionProvider.CloseConnection(System.Data.IDbConnection)
    16edd34c 11aceb42 NHibernate.AdoNet.ConnectionManager.CloseConnection()
    16edd358 11aceb02 NHibernate.AdoNet.ConnectionManager.AggressiveRelease()
    16edd364 11acf783 NHibernate.AdoNet.ConnectionManager.AfterTransaction()
    16edd370 11acf6d1 NHibernate.Impl.SessionImpl.AfterTransactionCompletion(Boolean, NHibernate.ITransaction)
    16edd3ec 11acf5de NHibernate.AdoNet.ConnectionManager.AfterNonTransactionalQuery(Boolean)
    16edd3fc 11acf539 NHibernate.Impl.AbstractSessionImpl.AfterOperation(Boolean)
    16edd474 130311e4 NHibernate.Impl.SessionImpl.List(NHibernate.IQueryExpression, NHibernate.Engine.QueryParameters, System.Collections.IList)
    16ede51c 13031071 NHibernate.Impl.AbstractSessionImpl.List(NHibernate.IQueryExpression, NHibernate.Engine.QueryParameters)
    16ede538 13030b68 NHibernate.Impl.ExpressionQueryImpl.List()
    16ede568 13030a47 NHibernate.Linq.DefaultQueryProvider.ExecuteQuery(NHibernate.Linq.NhLinqExpression, NHibernate.IQuery, NHibernate.Linq.NhLinqExpression)
    16ede59c 11d4c163 NHibernate.Linq.DefaultQueryProvider.Execute(System.Linq.Expressions.Expression)
    16ede5b0 11d4c108 NHibernate.Linq.DefaultQueryProvider.Execute[[System.__Canon, mscorlib]](System.Linq.Expressions.Expression)
    16ede5c4 11d4c0a6 Remotion.Linq.QueryableBase`1[[System.__Canon, mscorlib]].GetEnumerator()
    16ede5d4 61022108 System.Linq.Enumerable+WhereEnumerableIterator`1[[System.__Canon, mscorlib]].MoveNext()*** WARNING: Unable to verify checksum for System.Core.ni.dll
    *** ERROR: Module load completed but symbols could not be loaded for System.Core.ni.dll
    
    16ede5e4 610166ea System.Linq.Buffer`1[[System.__Canon, mscorlib]]..ctor(System.Collections.Generic.IEnumerable`1<System.__Canon>)
    16ede620 6122e171 System.Linq.OrderedEnumerable`1+<GetEnumerator>d__0[[System.__Canon, mscorlib]].MoveNext()
    16ede63c 79b39758 System.Collections.Generic.List`1[[System.__Canon, mscorlib]]..ctor(System.Collections.Generic.IEnumerable`1<System.__Canon>)*** WARNING: Unable to verify checksum for mscorlib.ni.dll
    *** ERROR: Module load completed but symbols could not be loaded for mscorlib.ni.dll
    
    16ede66c 61021acf System.Linq.Enumerable.ToList[[System.__Canon, mscorlib]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
    


    1. Web API によって返される大きな JSON データの処理

    2. 存在する場合はUPDATE、それ以外の場合はSQLServer2008でINSERT

    3. MySQL ASIN()関数–数値のアークサインを返します

    4. 読み取り専用(不変)PostgreSQLテーブルの行数を取得するためのインデックス?