add locl_tracking GUC
authorTeodor Sigaev <teodor@sigaev.ru>
Wed, 10 May 2017 15:02:24 +0000 (18:02 +0300)
committerTeodor Sigaev <teodor@sigaev.ru>
Wed, 10 May 2017 15:02:24 +0000 (18:02 +0300)
README.online_analyze
online_analyze.c

index f7d2942..d72f17d 100644 (file)
@@ -10,6 +10,9 @@ Custom variables (defaults values are shown):
 online_analyze.enable = on  
        Enables on-line analyze
 
 online_analyze.enable = on  
        Enables on-line analyze
 
+online_analyze.local_tracking = off
+       Per backend tracking for temp tables (do not use system statistic)
+
 online_analyze.verbose = on
        Execute ANALYZE VERBOSE
 
 online_analyze.verbose = on
        Execute ANALYZE VERBOSE
 
index c70b1bb..90755e2 100644 (file)
@@ -63,6 +63,7 @@ PG_MODULE_MAGIC;
 #endif
 
 static bool online_analyze_enable = true;
 #endif
 
 static bool online_analyze_enable = true;
+static bool online_analyze_local_tracking = false;
 static bool online_analyze_verbose = true;
 static double online_analyze_scale_factor = 0.1;
 static int online_analyze_threshold = 50;
 static bool online_analyze_verbose = true;
 static double online_analyze_scale_factor = 0.1;
 static int online_analyze_threshold = 50;
@@ -454,14 +455,20 @@ makeAnalyze(Oid relOid, CmdKind operation, int64 naffected)
        {
                /* only analyze */
                rstat->changes_since_analyze = 0;
        {
                /* only analyze */
                rstat->changes_since_analyze = 0;
+               rstat->analyze_timestamp = now;
                return;
        }
 
        Assert(rstat->tableid == relOid);
 
                return;
        }
 
        Assert(rstat->tableid == relOid);
 
-       /* do not rered data if it was a truncation */
-       if (operation != CK_TRUNCATE && operation != CK_FASTTRUNCATE &&
-               (newTable == true || rstat->rereadStat == true))
+       if (
+               /* do not reread data if it was a truncation */
+               operation != CK_TRUNCATE && operation != CK_FASTTRUNCATE &&
+               /* read  for persistent table and for temp teble if it allowed */
+               (reltype == OATT_PERSISTENT || online_analyze_local_tracking == false) &&
+               /* read only for new table or we know that it's needed */
+               (newTable == true || rstat->rereadStat == true)
+          )
        {
                rstat->rereadStat = false;
 
        {
                rstat->rereadStat = false;
 
@@ -926,6 +933,25 @@ _PG_init(void)
                NULL
        );
 
                NULL
        );
 
+       DefineCustomBoolVariable(
+               "online_analyze.local_tracking",
+               "Per backend tracking",
+               "Per backend tracking for temp tables (do not use system statistic)",
+               &online_analyze_local_tracking,
+#if PG_VERSION_NUM >= 80400
+               online_analyze_local_tracking,
+#endif
+               PGC_USERSET,
+#if PG_VERSION_NUM >= 80400
+               GUC_NOT_IN_SAMPLE,
+#if PG_VERSION_NUM >= 90100
+               NULL,
+#endif
+#endif
+               NULL,
+               NULL
+       );
+
        DefineCustomBoolVariable(
                "online_analyze.verbose",
                "Verbosity of on-line analyze",
        DefineCustomBoolVariable(
                "online_analyze.verbose",
                "Verbosity of on-line analyze",