Repository: incubator-hawq Updated Branches: refs/heads/master 517e6d26c -> 5da0476a1
HAWQ-1286. Reduce unnecessary calls of namespace check when run \d Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/5da0476a Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/5da0476a Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/5da0476a Branch: refs/heads/master Commit: 5da0476a168a754a1c3d55096d6bbb31ecdd78ab Parents: 517e6d2 Author: interma <inte...@outlook.com> Authored: Fri Jan 20 14:46:16 2017 +0800 Committer: interma <inte...@outlook.com> Committed: Fri Jan 20 14:46:16 2017 +0800 ---------------------------------------------------------------------- src/backend/catalog/namespace.c | 23 +++++++++++++++++++++++ src/backend/tcop/postgres.c | 4 ++++ src/include/catalog/namespace.h | 6 +++++- 3 files changed, 32 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/5da0476a/src/backend/catalog/namespace.c ---------------------------------------------------------------------- diff --git a/src/backend/catalog/namespace.c b/src/backend/catalog/namespace.c index 7049d32..a780625 100644 --- a/src/backend/catalog/namespace.c +++ b/src/backend/catalog/namespace.c @@ -48,9 +48,11 @@ #include "utils/memutils.h" #include "utils/syscache.h" #include "utils/guc.h" +#include "utils/hsearch.h" #include "cdb/cdbvars.h" #include "tcop/utility.h" + /* * The namespace search path is a possibly-empty list of namespace OIDs. * In addition to the explicit list, several implicitly-searched namespaces @@ -113,6 +115,8 @@ * namespaceUser is the userid the path has been computed for. */ +extern const char *debug_query_string; + static List *namespaceSearchPath = NIL; static Oid namespaceUser = InvalidOid; @@ -129,6 +133,9 @@ static bool tempCreationPending = false; /* The above five values are valid only if namespaceSearchPathValid */ static bool namespaceSearchPathValid = true; +/* store the query sign on the last call of recomputeNamespacePath(), and used the sign to judge cache invalidation */ +static uint32 last_query_sign = 0; + /* * myTempNamespace is InvalidOid until and unless a TEMP namespace is set up * in a particular backend session (this happens when a CREATE TEMP TABLE @@ -178,6 +185,11 @@ Datum pg_my_temp_schema(PG_FUNCTION_ARGS); Datum pg_is_other_temp_schema(PG_FUNCTION_ARGS); Datum pg_objname_to_oid(PG_FUNCTION_ARGS); +void +reset_query_sign() +{ + last_query_sign = 0; +} /* * GetCatalogId @@ -1935,9 +1947,20 @@ recomputeNamespacePath(void) if (namespaceSearchPathValid && namespaceUser == roleid) { if (!enable_ranger) + { return; + } else + { + uint32 current_query_sign = 0; + if (debug_query_string != NULL) + current_query_sign = string_hash(debug_query_string, strlen(debug_query_string)); + + if (current_query_sign == last_query_sign) + return; + last_query_sign = current_query_sign; elog(DEBUG3, "recompute search_path[%s] when enable_ranger", namespace_search_path); + } } /* Need a modifiable copy of namespace_search_path string */ http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/5da0476a/src/backend/tcop/postgres.c ---------------------------------------------------------------------- diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index fc71eda..74c5dd6 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -115,6 +115,7 @@ #include "cdb/cdbinmemheapam.h" #include "utils/rangerrest.h" +#include "catalog/namespace.h" #include "resourcemanager/dynrm.h" #include "resourcemanager/envswitch.h" @@ -591,6 +592,9 @@ ReadCommand(StringInfo inBuf) result = SocketBackend(inBuf); else result = InteractiveBackend(inBuf); + + /* reset last_query_sign to 0 when running a new sql */ + reset_query_sign(); return result; } http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/5da0476a/src/include/catalog/namespace.h ---------------------------------------------------------------------- diff --git a/src/include/catalog/namespace.h b/src/include/catalog/namespace.h index 34b3f1a..b8fce41 100644 --- a/src/include/catalog/namespace.h +++ b/src/include/catalog/namespace.h @@ -90,9 +90,13 @@ extern void AtEOXact_Namespace(bool isCommit); extern void AtEOSubXact_Namespace(bool isCommit, SubTransactionId mySubid, SubTransactionId parentSubid); +extern List *fetch_search_path(bool includeImplicit); + +extern void reset_query_sign(); + /* stuff for search_path GUC variable */ extern char *namespace_search_path; -extern List *fetch_search_path(bool includeImplicit); + #endif /* NAMESPACE_H */