@@ -41,6 +41,9 @@ class TKqpQueryCache {
4141 YQL_ENSURE (compileResult->PreparedQuery );
4242
4343 auto queryIt = QueryIndex.emplace (query, compileResult->Uid );
44+ if (!queryIt.second ) {
45+ EraseByUid (compileResult->Uid );
46+ }
4447 Y_ENSURE (queryIt.second );
4548 }
4649
@@ -676,6 +679,7 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
676679 Y_ENSURE (query.UserSid == userSid);
677680 }
678681
682+ LOG_DEBUG_S (ctx, NKikimrServices::KQP_COMPILE_SERVICE, " Try to find query by queryId, queryId: " << query.SerializeToString ());
679683 auto compileResult = QueryCache.FindByQuery (query, request.KeepInCache );
680684 if (HasTempTablesNameClashes (compileResult, request.TempTablesState )) {
681685 compileResult = nullptr ;
@@ -857,7 +861,7 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
857861 try {
858862 if (compileResult->Status == Ydb::StatusIds::SUCCESS) {
859863 if (!hasTempTablesNameClashes) {
860- UpdateQueryCache (compileResult, keepInCache, compileRequest.CompileSettings .IsQueryActionPrepare , isPerStatementExecution);
864+ UpdateQueryCache (ctx, compileResult, keepInCache, compileRequest.CompileSettings .IsQueryActionPrepare , isPerStatementExecution);
861865 }
862866
863867 if (ev->Get ()->ReplayMessage && !QueryReplayBackend->IsNull ()) {
@@ -939,15 +943,21 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
939943 return compileResult->PreparedQuery ->HasTempTables (tempTablesState, withSessionId);
940944 }
941945
942- void UpdateQueryCache (TKqpCompileResult::TConstPtr compileResult, bool keepInCache, bool isQueryActionPrepare, bool isPerStatementExecution) {
946+ void UpdateQueryCache (const TActorContext& ctx, TKqpCompileResult::TConstPtr compileResult, bool keepInCache, bool isQueryActionPrepare, bool isPerStatementExecution) {
943947 if (QueryCache.FindByUid (compileResult->Uid , false )) {
944948 QueryCache.Replace (compileResult);
945949 } else if (keepInCache) {
950+ if (compileResult->Query ) {
951+ LOG_DEBUG_S (ctx, NKikimrServices::KQP_COMPILE_SERVICE, " Insert query into compile cache, queryId: " << compileResult->Query ->SerializeToString ());
952+ if (QueryCache.FindByQuery (*compileResult->Query , keepInCache)) {
953+ LOG_ERROR_S (ctx, NKikimrServices::KQP_COMPILE_SERVICE, " Trying to insert query into compile cache when it is already there" );
954+ }
955+ }
946956 if (QueryCache.Insert (compileResult, TableServiceConfig.GetEnableAstCache (), isPerStatementExecution)) {
947957 Counters->CompileQueryCacheEvicted ->Inc ();
948958 }
949959 if (compileResult->Query && isQueryActionPrepare) {
950- if (InsertPreparingQuery (compileResult, true , isPerStatementExecution)) {
960+ if (InsertPreparingQuery (ctx, compileResult, true , isPerStatementExecution)) {
951961 Counters->CompileQueryCacheEvicted ->Inc ();
952962 };
953963 }
@@ -958,6 +968,8 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
958968 YQL_ENSURE (queryAst.Ast );
959969 YQL_ENSURE (queryAst.Ast ->IsOk ());
960970 YQL_ENSURE (queryAst.Ast ->Root );
971+ LOG_DEBUG_S (ctx, NKikimrServices::KQP_COMPILE_SERVICE, " Try to find query by ast, queryId: " << compileRequest.Query .SerializeToString ()
972+ << " , ast: " << queryAst.Ast ->Root ->ToString ());
961973 auto compileResult = QueryCache.FindByAst (compileRequest.Query , *queryAst.Ast , compileRequest.CompileSettings .KeepInCache );
962974
963975 if (HasTempTablesNameClashes (compileResult, compileRequest.TempTablesState )) {
@@ -1026,7 +1038,7 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
10261038 }
10271039
10281040private:
1029- bool InsertPreparingQuery (const TKqpCompileResult::TConstPtr& compileResult, bool keepInCache, bool isPerStatementExecution) {
1041+ bool InsertPreparingQuery (const TActorContext& ctx, const TKqpCompileResult::TConstPtr& compileResult, bool keepInCache, bool isPerStatementExecution) {
10301042 YQL_ENSURE (compileResult->Query );
10311043 auto query = *compileResult->Query ;
10321044
@@ -1051,6 +1063,7 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
10511063 auto newCompileResult = TKqpCompileResult::Make (CreateGuidAsString (), compileResult->Status , compileResult->Issues , compileResult->MaxReadType , std::move (query), compileResult->Ast );
10521064 newCompileResult->AllowCache = compileResult->AllowCache ;
10531065 newCompileResult->PreparedQuery = compileResult->PreparedQuery ;
1066+ LOG_DEBUG_S (ctx, NKikimrServices::KQP_COMPILE_SERVICE, " Insert preparing query with params, queryId: " << query.SerializeToString ());
10541067 return QueryCache.Insert (newCompileResult, TableServiceConfig.GetEnableAstCache (), isPerStatementExecution);
10551068 }
10561069
0 commit comments