From 96acb6c93ec8582c542b24de0df73d37984a11e2 Mon Sep 17 00:00:00 2001 From: lesovsky Date: Wed, 9 Sep 2020 08:36:15 +0500 Subject: [PATCH] Add PostgreSQL DBA roadmap. --- content/authors.json | 5 + content/roadmaps.json | 30 ++- .../7-postgresql-dba/0-About/0-Summary.md | 173 ++++++++++++++++++ .../roadmaps/7-postgresql-dba/landscape.md | 2 + content/roadmaps/7-postgresql-dba/meta.json | 14 ++ .../roadmaps/7-postgresql-dba/resources.md | 7 + 6 files changed, 229 insertions(+), 2 deletions(-) create mode 100644 content/roadmaps/7-postgresql-dba/0-About/0-Summary.md create mode 100644 content/roadmaps/7-postgresql-dba/landscape.md create mode 100644 content/roadmaps/7-postgresql-dba/meta.json create mode 100644 content/roadmaps/7-postgresql-dba/resources.md diff --git a/content/authors.json b/content/authors.json index 34b0e0250..3fd701d98 100644 --- a/content/authors.json +++ b/content/authors.json @@ -33,5 +33,10 @@ "twitter": "BharmalEbrahim", "picture": "/authors/ebrahimbharmal007.png", "bio": "Love building projects using tools completely new to me. Python forever. Senior at University of Texas at Arlington (2021)" + }, + { + "username": "lesovsky", + "name": "Alexey Lesovsky", + "bio": "Linux system administrator and PostgreSQL DBA at DataEgret." } ] diff --git a/content/roadmaps.json b/content/roadmaps.json index 33b037e6e..719c5333b 100644 --- a/content/roadmaps.json +++ b/content/roadmaps.json @@ -168,7 +168,7 @@ "name": "Kamran Ahmed", "url": "https://twitter.com/kamranahmedse" }, - "contributorsCount": 0, + "contributorsCount": 1, "contributorsUrl": "/react/contributors", "url": "/react", "sidebar": {} @@ -208,7 +208,7 @@ "name": "Kamran Ahmed", "url": "https://twitter.com/kamranahmedse" }, - "contributorsCount": 0, + "contributorsCount": 1, "contributorsUrl": "/android/contributors", "url": "/android", "sidebar": {} @@ -246,5 +246,31 @@ "contributorsUrl": "/qa/contributors", "url": "/qa", "sidebar": {} + }, + { + "title": "PostgreSQL DBA Roadmap", + "description": "Step by step guide to becoming a modern PostgreSQL DBA", + "featuredDescription": "Step by step guide to becoming a modern PostgreSQL DBA in 2020", + "path": "/roadmaps/7-postgresql-dba/landscape.md", + "resources": "/roadmaps/7-postgresql-dba/resources.md", + "author": { + "name": "Alexey Lesovsky", + "url": "https://github.com/lesovsky" + }, + "featured": false, + "detailed": false, + "versions": [], + "contributorsCount": 0, + "contributorsUrl": "/postgresql-dba/contributors", + "url": "/postgresql-dba", + "sidebar": { + "About": [ + { + "url": "/postgresql-dba/summary", + "title": "Summary", + "path": "/roadmaps/7-postgresql-dba/0-About/0-Summary.md" + } + ] + } } ] \ No newline at end of file diff --git a/content/roadmaps/7-postgresql-dba/0-About/0-Summary.md b/content/roadmaps/7-postgresql-dba/0-About/0-Summary.md new file mode 100644 index 000000000..48f294d23 --- /dev/null +++ b/content/roadmaps/7-postgresql-dba/0-About/0-Summary.md @@ -0,0 +1,173 @@ +#### PostgreSQL DBA Roadmap + +##### Learn basic RDBMS terms and concepts +Get basic understanding of Postgres key terms and basic RDBMS concepts. +- Object model: data types, columns, rows, tables, schemas, databases, queries. +- Relational model: domains, attributes, tuples, relations, constraints, NULL. +- Databases high-level concepts: ACID, MVCC, transactions, write-ahead log, query processing. +- Links: + - [Postgres Glossary](https://www.postgresql.org/docs/13/glossary.html) + - SQL and Relational Theory - Christopher J. Date, 2009 + - Database Design and Relational Theory - Christopher J. Date, 2012 + +##### Learn how to install and run PostgreSQL +Get practical skills of how to set up and run Postgres to get a working environment for further learning. +- using package managers (APT, YUM, etc.) +- using `Docker`. +- managing Postgres service using `systemd` (start, stop, restart, reload). +- managing Postgres service using `pg_ctl`, or OS-specific tools (like `pg_ctlcluster`). +- connect to Postgres using `psql`. +- deploy database service in cloud environment (AWS, GCE, Azure, Heroku, DigitalOcean, etc...). +- Links: + - [Official download and install instructions](https://www.postgresql.org/download/) + - [Official Docker images](https://hub.docker.com/_/postgres) + +##### Learn SQL concepts +Get practical skills of how to create and manipulate database objects and how to execute queries using `psql` client. +- Understanding basic data types. +- DML queries: querying data, modifying data, filtering data, joining tables. + - advanced topics: transactions, CTE, subqueries, lateral join, grouping, set operations. +- DDL queries: managing tables and schemas (create, alter, drop). +- Import and export data using `COPY`. +- Links: + - [DB Fiddle](https://www.db-fiddle.com/) + - [PostgreSQL Tutorial](https://www.postgresqltutorial.com/) + - [PostgreSQL SQL Getting Started](https://www.postgresql.org/docs/current/tutorial-sql.html) + - [The SQL Language](https://www.postgresql.org/docs/current/sql.html) + +##### Learn how to configure Postgres +Get understanding of the main aspects of how Postgres could be configured. Deep understanding of Postgres internals is not yet necessary here. +- postgresql.conf: + - resources usage + - write-ahead log + - checkpoints and background writer + - cost-based vacuum and autovacuum + - replication + - query planner + - reporting, logging and statistics + - adding extra extensions + - ... keep exploring other configuration options +Links: + - [Postgresqlco.nf](http://postgresqlco.nf/) + +##### Learn Postgres security concepts +Get understanding about basic security concepts and common ways of how to deploy secure configurations. +- Authentication models, roles, pg_hba.conf, SSL settings. +- Objects privileges: grant/revoke, default privileges. +- Advanced topics - row-level security, selinux. +- Links: + - [Client authentication](https://www.postgresql.org/docs/current/client-authentication.html) + - [Roles and users managements](https://www.postgresql.org/docs/current/user-manag.html) + +##### Develop infrastructure DBA skills +Get practical skills of how to deploy, extend, maintain and support Postgres installations and 3rd-party Postgres ecosystem software. +- Replication: streaming replication, logical replication +- Backup/recovery tools: + - Built-in: `pg_dump`, `pg_dumpall`, `pg_restore`, `pg_basebackup` + - 3rd-party: `barman`, `pgbackrest`, `pg_probackup`, `WAL-G` + - Backup validation procedures +- Upgrading procedures + - minor and major upgrades using `pg_upgrade` + - upgrades using logical replication +- Connection pooling: + - `Pgbouncer` + - alternatives: `Pgpool-II`, `Odyssey`, `Pgagroal` +- Infrastructure monitoring: `Prometheus`, `Zabbix`, other favourite monitoring solution +- High availability and cluster management tools: + - `Patroni` + - alternatives: `Repmgr`, `Stolon`, `pg_auto_failover`, `PAF` +- Applications Load Balancing and Service Discovery: `Haproxy`, `Keepalived`, `Consul`, `Etcd` +- Deploy Postgres on `Kubernetes`: simple `StatefulSet` setup, `HELM`, operators +- Resource usage and provisioning, capacity planning + +##### Learn how to automate routines +Get practical skills, learn automation tools and automate existing routine tasks. +- Automation using shell scripts or any other favourite language (`Bash`, `Python`, `Perl`, etc) +- Configuration management: `Ansible`, `Salt`, `Chef`, `Puppet` + +##### Develop application DBA skills +Learn theory and get practical skills of how applications should work with Postgres +- Migrations: + - practical patterns and antipatterns + - tools: `liquibase`, `sqitch`, language-specific tools +- Data import/export, bulk loading and processing +- Queues: + - practical patterns and anti-patterns + - `Skytools PGQ` +- Data partitioning and sharding patterns. +- Database normalization and normal forms. +- Books: + - The Art of PostgreSQL - Dimitri Fontaine, 2020 + +##### Learn Postgres advanced topics +Here is important to continuously extend and develop existing knowledge about Postgres. +- Low level internals: + - Processes and memory architecture + - Vacuum processing + - Buffer management + - Lock management + - [Physical storage and file layout](https://www.postgresql.org/docs/current/storage.html) + - [System catalog](https://www.postgresql.org/docs/current/catalogs.html) +- Fine-grained tuning: + - Per-user, per-database settings + - [Storage parameters](https://www.postgresql.org/docs/current/sql-createtable.html#SQL-CREATETABLE-STORAGE-PARAMETERS) + - Workload-dependant tuning: OLTP, OLAP, HTAP +- Advanced SQL topics: + - PL/pgSQL, procedures and functions, triggers + - aggregate and window functions + - recursive CTE +- Links: + - [The Internals of PostgreSQL](http://www.interdb.jp/pg/index.html) for database administrators and system developers + - [PL/pgSQL Guide](https://www.postgresql.org/docs/current/plpgsql.html) + +##### Learn Postgres troubleshooting technics +Get basic understanding about troubleshooting tools and get practical skills of how to detect and resolve problems. +- Operating system tools + - `top` (`htop`, `atop`) + - `sysstat` + - `iotop` +- Postgres system views + - `pg_stat_activity` + - `pg_stat_statements` +- Postgres tools + - `pgcenter` - *personal recommendation* +- Query analyzing: + - [EXPLAIN](https://www.postgresql.org/docs/current/sql-explain.html) + - [Depesz](https://explain.depesz.com/) online EXPLAIN visualization tool + - [PEV](https://tatiyants.com/pev/#/plans) online EXPLAIN visualization tool + - [Tensor](https://explain.tensor.ru/) online EXPLAIN visualization tool, RU language only +- Log analyzing: + - `pgBadger` + - Ad-hoc analyzing using `grep`, `awk`, `sed`, etc. +- External tracing/profiling tools: `gdb`, `strace`, `perf-tools`, `ebpf`, core dumps +- Troubleshooting methods: USE, RED, Golden signals +- Links: + - [Linux Performance](http://www.brendangregg.com/linuxperf.html) by Brendan Gregg + - [USE Method](http://www.brendangregg.com/usemethod.html) + +##### Learn SQL optimization technics +Get understanding and practical skills of how to optimize SQL queries. +- Indexes, and their use cases: B-tree, Hash, GiST, SP-GiST, GIN, BRIN +- SQL queries patterns and anti-patterns +- SQL schema design patterns and anti-patterns +- Links: + - [Use the Index, Luke](https://use-the-index-luke.com/) - a Guide to Database Performance for Developers +- Books: + - SQL Antipatterns: Avoiding the Pitfalls of Database Programming - Bill Karwin, 2010 + +##### Develop architect skills +Get deeper understanding of Postgres use cases and where Postgres is suitable and where is not. +- Postgres forks and extensions: `Greenplum`, `Timescaledb`, `Citus`, `Postgres-XL`, etc. +- RDBMS in general, benefits and limitations +- Differences between Postgres and other RDBMS and NoSQL databases + +##### Develop Postgres hacker skills +Get involved to Postgres community and contribute to Postgres; be a useful member of Postgres, and the open source community; use personal experience to help other people. +- daily reading and answering in [mailing lists](https://www.postgresql.org/list/) + - pgsql-general + - pgsql-admin + - pgsql-performance + - pgsql-hackers + - pgsql-bugs +- reviewing patches +- writing patches, attending in [Commitfests](https://commitfest.postgresql.org/) diff --git a/content/roadmaps/7-postgresql-dba/landscape.md b/content/roadmaps/7-postgresql-dba/landscape.md new file mode 100644 index 000000000..461d3d83a --- /dev/null +++ b/content/roadmaps/7-postgresql-dba/landscape.md @@ -0,0 +1,2 @@ +## PostgreSQL DBA Roadmap +Roadmap to becoming a PostgreSQL Database Administrator diff --git a/content/roadmaps/7-postgresql-dba/meta.json b/content/roadmaps/7-postgresql-dba/meta.json new file mode 100644 index 000000000..85ea1329f --- /dev/null +++ b/content/roadmaps/7-postgresql-dba/meta.json @@ -0,0 +1,14 @@ +{ + "title": "PostgreSQL DBA Roadmap", + "description": "Step by step guide to becoming a modern PostgreSQL DBA", + "featuredDescription": "Step by step guide to becoming a modern PostgreSQL DBA in 2020", + "path": "./landscape.md", + "resources": "./resources.md", + "author": { + "name": "Alexey Lesovsky", + "url": "https://github.com/lesovsky" + }, + "featured": false, + "detailed": false, + "versions": [] +} diff --git a/content/roadmaps/7-postgresql-dba/resources.md b/content/roadmaps/7-postgresql-dba/resources.md new file mode 100644 index 000000000..9ea876887 --- /dev/null +++ b/content/roadmaps/7-postgresql-dba/resources.md @@ -0,0 +1,7 @@ +> **We are still preparing the resources**. Please check back later or [subscribe to get notified](/signup). + +While we prepare the list, follow this simple advice to learn anything + +> Just **pick a project and start working on it**, you will learn all that you need along the way. + +**→**   [All Roadmaps](/roadmaps)  •  [Programming guides](/guides)  •  [Subscribe](/signup)