-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Rewrite Postgres size query and add postgresql.relation.{tuples,pages,all_visible}
+ toast_size metrics
#14500
Conversation
For my education, the flag |
I wanted to look at the backend process matching the psql session which will run the query I'm testing.
An idle session will be tagged as
|
86a05a6
to
93cdb34
Compare
9a682c0
to
99b01d0
Compare
@bonnefoa thanks for doing this. Is this going to superseed #14156 and #14056 ? (cc @FlipEnergy) |
48094d9
to
f863784
Compare
d5462c6
to
b9b151a
Compare
e30dd66
to
b7af4c2
Compare
Use new query executor Split toast size from table size Add partition_of tag Add pages/tuples/allvisible metrics Optimise query to minimise stat calls
b7af4c2
to
f780d20
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, @bonnefoa . Nice detailed analysis of the impact of the changes, too.
remove lines Update CHANGELOG.md Draft CHANGELOG.md Update metadata.csv Update metadata.json Update conftest.py Update CHANGELOG.md Remove change log Update ecs_fargate.py Add __init__ function Fix ecs_fargate.py and add tests Add new performance counter metrics (#14625) * Add new cluster metrics * Add host and VM metrics * Add realtime fixtures * update metadata.csv * Add throughput metric Move cancel waiting logic to test functions for DBMAsyncJob (#14773) * init commit * revert changes to sqlserver, mysql, utils tests Add validations for removed dependencies (#14556) * Map out new licenses validation * Implement validations for extra licenses * Add constants to config.toml * Implement license validation * Uncomment legacy licenses validation * Keep license command addition in same place * Small style change * Update config.toml override values * Refactor * Fix style * Apply suggestions from code review Co-authored-by: Ofek Lev <[email protected]> * Update suggestions * Require CI for license validation tests and update to use empty envvars * Fix permission for file * Add windows version of setting github env vars * Fix windows file * Change to powershell script * Output GITHUB_ENV on windows CI * Convert entirely to powershell * Change back to bat file * Test DD_GITHUB_USER value * Print github user in license test * Manually set Github user and token in test * Fix config_file * Print github user * Check if tokens are the same * Remove additional space in bat script * Fix style and remove test code * Change order of scripts * Try commenting out model.github override * Revert previous commit * Change to threads instead of async * Switch out async request to requests * Clean up * Fix style --------- Co-authored-by: Ofek Lev <[email protected]> DOCS-5656 gke setup links to operator/helm (#14746) dbm-oracle-dashboard (#14736) Internally compile the `include` patterns in the autodiscovery feature (#14768) * Internally compile the `include` patterns in the discovery feature * address Use Git for versioning (#14778) Upgrade Pydantic model code generator (#14779) * Upgrade Pydantic model code generator * address build standalone binaries for ddev (#14774) Remove `pyperclip` dependency and clipboard functionality (#14782) [Release] Bumped datadog_checks_dev version to 20.0.0 (#14784) * [Release] Bumped datadog_checks_dev version to 20.0.0 * [Release] Update metadata Bump the minimum version of datadog-checks-dev (#14785) update license path (#14783) Allow all projects to be collected in REST implementation (#14433) * Bug Fix Teamcity rest with all projects * . Rewrite Postgres size query and add `postgresql.relation.{tuples,pages,all_visible}` + toast_size metrics (#14500) * Bumped dependency version * Rewrite size metric query Use new query executor Split toast size from table size Add partition_of tag Add pages/tuples/allvisible metrics Optimise query to minimise stat calls * Add partitioned test tables * Update metadata with new metric * Fix version check * Fix wal_level for tests [SNMP] Add metadata for traps telemetry metrics (#14769) * Add metadata for traps telemetry metrics * Remove commas from desc 🤦 * Add units Temporarily disable py2 tests on PRs (#14793) fix(redisdb): return len of stream instead of 1 (#14722) Currently the code compute the len of the stream but report always 1 This change fixes this. Update Netflow dashboard (#14794) * update Netflow dashboard * remove datadog_demo_keep:true * avg -> sum * rename dashboard revert manifest.json (#14797) Add User Profiles support (#14752) Remove Content (#14766) Update wording and add extra install directions for ODBC (#14781) * Update wording and add extra install directions for ODBC * Update README.md Add ability to choose tag to append to VM hostname (#14657) * Add ability to choose tag to append to VM hostname * Add a test for integration tags * Sort list * Change log to debug * Fix style * Allow user to choose a datadog tag for vm hostname Fix ability to release ddev (#14790) Disable server info and version collection when collect_server_info is false (#14610) * if collect_server_info is set to false disable server info and version collection * the collect metadata in check.py has to check for the collect_server_info before attempting to collect server info, even when the base url is well formated * add testing to see if metadata is collected when collect_server_info is false * add testing to see if metadata is collected when collect_server_info is false * fix typo * fix typo * commit * commit * commit * commit typo * fix check.py [Release] Bumped datadog_checks_dev version to 20.0.1 (#14806) * [Release] Bumped datadog_checks_dev version to 20.0.1 * [Release] Update metadata [Release] Bumped ddev version to 3.0.0 (#14807) * [Release] Bumped ddev version to 3.0.0 * [Release] Update metadata fix build flake for ddev (#14808) Fix ddev platform installers and releasing (#14812) Bump postgres integration to Python 3 (#14813) update changelog generation (#14810) Update ecs_fargate/tests/fixtures/metadata_v4.json Co-authored-by: Cedric Lamoriniere <[email protected]> Update ecs_fargate/tests/fixtures/stats_linux_v4.json Co-authored-by: Cedric Lamoriniere <[email protected]> Update test_unit_v4.py Update license term Update test_unit_v4.py update license format Update metadata.csv Fix unit name Set the `marker` option to `not e2e` by default (#14804) Add profile for hp-ilo (#14771) * add profile for hp-ilo * add tests for new hp-ilo profile * fix linter * hp-ilo4 extends hp-ilo * delete unnecessary product_name field * lint * move hp-ilo to default-profiles Update profiles with missing devices (#14695) * update cisco-asr * update cisco-catalyst-wlc * update cisco-catalyst * update cisco-legacy-wlc * update cisco-nexus * update dell-poweredge * update juniper-ex * update juniper-mx * add cisco-isr * add models + move cisco5700WLC to cisco-catalyst-wlc * move cisco-isr to default-profiles Add profile 3com-huawei (#14694) Revert "Set the `marker` option to `not e2e` by default (#14804)" (#14815) This reverts commit 3f4c885. Sort assert_device_metadata tags (#14816) Add per vendor generic profiles (#14721) * add dell generic profile * add fortinet generic profile * add juniper generic profile * move vendor profiles to default-profiles * add test for cisco * add test for dell * add test for fortinet * add test for juniper * linter * linter Update formatting for changelogs (#14814) * Update formatting for changelogs * Update formatting for changelogs
What does this PR do?
postgresql.table_size
now only reports the size of the main table (removing toast size, fsm and vm)postgresql.toast_size
as table_size + index_size + toast_size.postgresql.toast_size
reports the size of the associated toast tabletag_none
type which doesn't report the tag if the value is nonepartition_of
tag if the table is a partitionMotivation
Size metrics needs to call admin function pg_table_size/pg_indexes_size/pg_total_relation_size. Those functions will generate multiple stat syscall behind the hood (see dbsize.c) to get the size of the files on disk which can be expensive with a high number of relation.
We also want to keep the precision of how much of the table is stored in toast table or not.
We manually compute the total to avoid the call to
pg_total_relation_size
, this will effectively divide the number of stat calls by 2.We rely on
pg_relation_size
instead ofpg_table_size
.pg_relation_size
don't include the toast so we can generate toast size and table size in different metric. We lose the size of FSM and VM but their sizes are generally dwarfed by the main table and it's a good trade off to skip those to save stat calls.pg_indexes_size
andpg_relation_size
calls still need to lock the relation. We know fromrelhasindex
andreltoastrelid
if a relation has indexes or a toast table so we can only call the functions only when necessary.tag_none
has been created to only report the tagpartition_of
when the table is a partition. Normal tables should not report the tag at all.Benchmarks and timings
Old query
stat calls
New query
Stat calls
We went from 86 stat calls to 23
Additional Notes
Review checklist (to be filled by reviewers)
changelog/
andintegration/
labels attachedqa/skip-qa
label.