sql >> Databáze >  >> RDS >> PostgreSQL

Jak zjistíte počet řádků pro všechny vaše tabulky v Postgresu

Existují tři způsoby, jak získat tento druh počítání, z nichž každý má své vlastní kompromisy.

Pokud chcete skutečný počet, musíte provést příkaz SELECT jako ten, který jste použili u každé tabulky. Je to proto, že PostgreSQL uchovává informace o viditelnosti řádku v samotném řádku, nikoli nikde jinde, takže jakýkoli přesný počet může být relativní pouze k nějaké transakci. Získáváte počet toho, co tato transakce vidí v okamžiku, kdy se provádí. Můžete to zautomatizovat, aby se spouštělo proti každé tabulce v databázi, ale pravděpodobně nepotřebujete takovou úroveň přesnosti nebo chcete čekat tak dlouho.

Druhý přístup poznamenává, že sběrač statistik sleduje, kolik řádků je v každém okamžiku „aktivních“ (nevymazáno nebo zastaralých pozdějšími aktualizacemi). Tato hodnota může být při velké aktivitě o něco nižší, ale obecně jde o dobrý odhad:

SELECT schemaname,relname,n_live_tup 
  FROM pg_stat_user_tables 
  ORDER BY n_live_tup DESC;

To vám také může ukázat, kolik řádků je mrtvých, což je samo o sobě zajímavé číslo ke sledování.

Třetím způsobem je poznamenat, že systémový příkaz ANALYZE, který je od PostgreSQL 8.3 pravidelně spouštěn procesem autovakuování pro aktualizaci statistik tabulky, také počítá odhad řádku. Můžete to vzít takto:

SELECT 
  nspname AS schemaname,relname,reltuples
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE 
  nspname NOT IN ('pg_catalog', 'information_schema') AND
  relkind='r' 
ORDER BY reltuples DESC;

Který z těchto dotazů je lepší použít, těžko říct. Normálně se rozhoduji na základě toho, zda existují užitečnější informace, které chci také použít uvnitř třídy pg_class nebo uvnitř pg_stat_user_tables. Pro základní účely počítání, abyste viděli, jak velké věci jsou obecně, by měly být obě dostatečně přesné.



  1. Porovnání časů selhání databáze proxy - ProxySQL, MaxScale a HAProxy

  2. 5 skvělých zdrojů, které vám pomohou rozhýbat vaši roli v monitorování databáze

  3. Úvod do dočasných tabulek na serveru SQL Server

  4. Rotační/kontingenční tabulka s agregací v Oracle