Tracking Table Row Counts Over Time

Jim_KnicelyJim_Knicely Administrator
edited February 2019 in Tips from the Team

I would like track the row counts from all of my database tables over time. Doing so will help me predict future growth.

How do I that? Like this…

Example:

dbadmin=> CREATE TABLE table_row_count(audit_date DATETIME, table_schema VARCHAR(128), table_name VARCHAR(128), row_count INT)
dbadmin->   ORDER BY table_schema, table_name, audit_date UNSEGMENTED ALL NODES;
CREATE TABLE

dbadmin=> \! vsql -Atc "SELECT 'SELECT sysdate || \$\$|'  || table_schema || '|' || table_name || '|\$\$ || (SELECT COUNT(*) FROM \"' || table_schema || '\".\"' || table_name || '\")' || NVL2(LEAD(table_schema) OVER (ORDER BY table_schema), ' UNION', ';') FROM tables WHERE table_schema || '.' || table_name <> 'public.table_row_count';" | vsql -At | vsql -c "COPY table_row_count FROM STDIN DIRECT;"

dbadmin=> SELECT * FROM table_row_count ORDER BY row_count DESC;
         audit_date        | table_schema |   table_name    | row_count
---------------------------+--------------+-----------------+-----------
2019-02-14 08:19:22.406804 | Happy        | Valentine's Day | 117440512
2019-02-14 08:19:22.406804 | public       | table_b         |     12288
2019-02-14 08:19:22.406804 | public       | parts           |         8
(3 rows)

Are the row counts accurate?

dbadmin=> SELECT COUNT(*) FROM "Happy"."Valentine's Day";
   COUNT
-----------
117440512
(1 row)

Yup!

Now I can add my table row count job to CRONTAB so that it runs once a day at 11:59 PM.

[dbadmin@s18384357 ~]$ cat table_row_count.sh
. ~/.bashrc
/opt/vertica/bin/vsql -Atc "SELECT 'SELECT sysdate || \$\$|'  || table_schema || '|' || table_name || '|\$\$ || (SELECT COUNT(*) FROM \"' || table_schema || '\".\"' || table_name || '\")' || NVL2(LEAD(table_schema) OVER (ORDER BY table_schema), ' UNION', ';') FROM tables WHERE table_schema || '.' || table_name <> 'public.table_row_count';" | /opt/vertica/bin/vsql -At | /opt/vertica/bin/vsql -c "COPY table_row_count FROM STDIN DIRECT;"

[dbadmin@s18384357 ~]$ crontab -l
# Minute    Hour     Day    Month    Day of Week            Command
   5         3        *       *         *                    /opt/vertica/oss/python/bin/python -m vertica.do_logrotate &> /dev/null
   59        23       *       *         *                    /home/dbadmin/table_row_count.sh

In a few months I’ll have a pretty good history of how my tables are growing and/or shrinking!

Helpful Links:
https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/Functions/Aggregate/COUNTAggregate.htm
https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/ConnectingToVertica/vsql/CommandLineOptions.htm
https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/ConnectingToVertica/vsql/CopyingDataUsingVsql.htm

Have fun!

Sign In or Register to comment.