aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access/transam
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2015-09-25 13:16:30 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2015-09-25 13:16:30 -0400
commit2abfd9d5e9cb7fe5345c415475622a4a95ea61e2 (patch)
treef52c0aa8e4aa5acc7b6b9ec9d8a7c950e7543538 /src/backend/access/transam
parent77130fc1482f978629a16c8e956a5477a05d2c04 (diff)
downloadpostgresql-2abfd9d5e9cb7fe5345c415475622a4a95ea61e2.tar.gz
postgresql-2abfd9d5e9cb7fe5345c415475622a4a95ea61e2.zip
Second try at fixing O(N^2) problem in foreign key references.
This replaces ill-fated commit 5ddc72887a012f6a8b85707ef27d85c274faf53d, which was reverted because it broke active uses of FK cache entries. In this patch, we still do nothing more to invalidatable cache entries than mark them as needing revalidation, so we won't break active uses. To keep down the overhead of InvalidateConstraintCacheCallBack(), keep a list of just the currently-valid cache entries. (The entries are large enough that some added space for list links doesn't seem like a big problem.) This would still be O(N^2) when there are many valid entries, though, so when the list gets too long, just force the "sinval reset" behavior to remove everything from the list. I set the threshold at 1000 entries, somewhat arbitrarily. Possibly that could be fine-tuned later. Another item for future study is whether it's worth adding reference counting so that we could safely remove invalidated entries. As-is, problem cases are likely to end up with large and mostly invalid FK caches. Like the previous attempt, backpatch to 9.3. Jan Wieck and Tom Lane
Diffstat (limited to 'src/backend/access/transam')
0 files changed, 0 insertions, 0 deletions