暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

深入理解PostgreSQL数据库管理员(DBA)的工作

作者:卡伦·杰克斯(KAREN JEX)

职业生涯一直在与数据库打交道(几年来一直专注于 PostgreSQL),目前是一名高级解决方案架构师。


译者注:本文作者从事多年的DBA工作,内容轻松幽默,详细阐述了DBA的工作要点,希望大家可以借助本文对DBA有更为全面的认识。原文标题为《长大后我想成为一名数据库管理员(没人这么说过)》,这里做了修改。


前言

我没有仅仅分享本月在维戈举行的DjangoCon Europe 2024[1]上发表的主题演讲幻灯片 ,而是尝试了一种新方法,这种方法受到 Simon Willison 带注释的演示文稿的启发。 这篇文章包含幻灯片以及文字记录、链接等,因此应该会更有用。

 

[1] https://2024.djangocon.eu/


这是我第三次在 DjangoCon Europe 上发言,也是我的第一次主题演讲。我希望能够参加更多活动,因为正如我在会议上所说的那样,与 Django 社区共度时光是我最喜欢的事情之一。我很高兴被邀请向满屋子的 Django 开发人员讲述我最喜欢的话题——数据库,尤其是 PostgreSQL

本次演讲针对的是那些无论喜欢与否都不得不照看数据库的开发人员。演讲将介绍开发人员在担任开发工作时需要了解的一些有关数据库的知识,并尝试鼓励他们热爱数据库。

我住在法国阿尔卑斯山的一个小村庄里,当我不玩数据库或谈论数据库时,我喜欢骑自行车出去 - 公路自行车、碎石自行车或山地自行车,这取决于我的感觉。我是一名高级解决方案架构师,之前从事过 DBA(数据库管理员),我还是 PostgreSQL 欧洲董事会成员,领导着(最近)成立的 PostgreSQL 欧洲多元化工作组,并在 PostgreSQL 和开发者会议上撰写和发表(关于数据库的)演讲。

 

 

你长大后想做什么?

当被问到“你长大后想做什么?”时,我怀疑有哪个孩子会回答“数据库管理员”。事实上,我问观众“这个房间里有谁说长大后想成为一名 DBA?”,不出所料,没有一个人举手。


我的整个职业生涯都在与数据库打交道,正如这张过去 25 年我的角色图所示。我曾担任过“范围广泛”的职位,如“初级数据库管理员”、“高级数据库管理员”、“数据库专家”和“高级数据库顾问”。


我现在的职位是我所担任过的唯一一个不包含“数据库”一词的职位,尽管我仍然只从事数据库工作,甚至我也不想长大后成为一名DBA!

虽然有一段时间我想成为一只恐龙,也许是因为我对职业选择了解不多。

无论如何,以防万一我错了,孩子们确实说他们长大后想成为数据库管理员,我认为应该做一些实际的研究。幸运的是,很多人已经为我做了艰苦的工作;他们出去问过一群孩子长大后想做什么,他们也问过成年人他们小时候想做什么[1] [2] [3]。


你会惊讶地听到数据库管理员

...

没有出现在任何列表中。



兽医或医生是受欢迎的选择,


 

就像职业足球运动员一样,

 


或者宇航员,

 


甚至大多数榜单上都有工程师的身影,



但不是数据库管理员。

我甚至不得不向你展示我的绘画“技巧”,以便能够包含一张 DBA 的图片,因为找到有用的图像并不容易。

所以我不得不承认,也许(只是也许)不是每个人都像我一样对数据库充满热情。

 

开发人员与数据库

我所交谈的大多数开发人员只是希望数据库在后台安静地工作,这样他们就可以专注于开发应用程序,这似乎是一个很合理的要求。


但数据库的世界正在发生变化。传统的 DBA 角色越来越少见,开发人员通常需要管理自己的数据库。即使您实际上不必照看自己的数据库,它通常也是应用程序的支柱,因此了解如何与它交互很有帮助。


所以我想谈谈您作为开发人员如何应对这个令人不快的现实,以及您真正需要了解的数据库知识。


显然,因为我非常喜欢数据库,所以我认为每个人都应该想知道有关数据库的一切。


如果你不想不断地谈论 Boyce-Codd 范式,那为什么不呢?

如果你的聚会技巧不是背诵事务的 ACID 属性,以及每个数据库管理系统中可用的不同事务隔离模式,并讨论你选择的 RDBMS 如何符合或不同于 SQL 标准,那么你还活着吗?


如果你需要其他想法来为你的下一次晚宴开场白,请不要犹豫与我们联系。

 

译者注:Boyce-Codd范式(Boyce-Codd Normal Form,简称BCNF)是数据库规范化中的一个概念,由Raymond F. Boyce和Edgar F. Codd提出。它是对第三范式(3NF)的进一步改进,旨在解决3NF未能解决的某些数据冗余和更新异常问题。

BCNF的核心原则是确保数据库表中的每一行都是唯一的,并且每个非主属性(非键属性)都完全依赖于主键。这里的“完全依赖”意味着非主属性只能通过主键才能确定,而不是依赖于主键的一部分。

 

5 月份, 我在 PyCon Italia 大会上聆听了 Daniele Procida 的演讲《细心的程序员》,他还在 DjangoCon Europe 大会上发表了演讲。如果你没能亲眼看到,我建议你去看看录音。Daniele 谈到了编写爱情程序的想法。我很喜欢他用 Python 编写的颂歌,歌颂他最喜欢的相机,这让我开始思考如何用数据库术语来表达爱情。


用实体关系图表达爱意

 

我最喜爱的语言是实体关系图。我认为它是一种非常漂亮的方式,可以表示几乎所有现实世界中的对象,包括它们的属性和它们之间的关系。

我喜欢它有规则、语法和惯例。我喜欢鱼尾纹符号的简单性,以及只需几条小线就可以传达如此多的信息。

仅从上面的小片段中,我们就知道一个部门可以有一个或多个员工,并且一个员工只属于一个部门。

我喜欢图中元素的颜色、间距和组织方式,即使是非技术读者也可以看到不同的概念和数据是如何组合在一起的。

我曾经迷失自我,花了很长时间重新排列 ER 图,使其看起来平衡、漂亮、清晰、有序,并确保它适合一张纸(尽管有时是一张很大的纸)。


有什么比用我的爱语来描述我最喜欢的东西——Postgres 集群更好的呢?


这个过程似乎总是很简单:

我建立了一个 Postgres 集群/实例 模型,它包含一个或多个数据库。

我可以为我的集群定义一个或多个角色或用户。

我可以创建一个或多个表空间。

我的每个数据库可以包含一个或多个架构,

并且我的每个表都属于其中一个模式。

这些表也可以属于其中一个表空间。

可以在表的一个或多个列上创建索引,

但同样,一列可以属于一个或多个索引。

 

我可以对授予角色的权限进行建模,也可以对某些数据库有权访问某些表空间的事实进行建模。我需要考虑如何对随时间推移的变化进行建模;我想记录历史数据吗?

我可以添加其他对象类型,如视图、函数、存储过程、扩展……

我甚至还没有开始添加列名或主键和外键列。

我不得不强迫自己停在那里,因为练习的目标不是提出一个现实的数据库集群模型,而是展示我如何以这种方式精心“绘制”我的数据库!

 

回到讨论的实际主题,DBA 到底是什么?


DBA 到底是什么?

根据职业服务、数据库管理系统供应商和求职网站的各种不同定义,似乎普遍的共识是,DBA 是使用专业软件来管理和保护存储数据的计算机系统的人。

这几乎完全没有告诉我们 DBA 一整天实际上在做什么


那么,DBA 到底是做什么的呢?我根据各种定义和示例招聘广告编制了一份 DBA 职责清单,这份清单很长。


显然,DBA 需要完成以下部分或全部工作:

1. 设计、实施和维护备份和恢复程序

2. 设计和实施安全程序,管理数据库访问

3. 监控数据库的可用性、性能、安全性、空间等

4. 逻辑和物理数据建模

5. 全天候支持和故障排除

6. 规划、执行和测试数据库软件的安装和升级

7. 为其他团队提供数据库专业知识、建议和支持

8. 修复性能问题,全面提高数据库性能

9. 规划未来数据库大小/资源需求

10. 创建数据库

11. 设计和实施数据库维护程序

12. 确保遵守数据保护/GDPR 规则


没问题!


然后是 DBA 应具备的技能列表。


我去年根据 IT Jobs Watch 的英国数据创建了此图表。它根据 DBA 职位广告中出现的频率对 DBA 职位所需的技能和能力进行了排名。


归结为:

1. SQL 技能、过程语言、数据集成和 ORM

2. 了解一个或多个数据库管理系统

(SQL Server、Oracle、Postgres)

3. 了解各种操作系统,

包括 Linux、Windows 和各种云环境

4. 性能调优

5. 数据库迁移

6. 灾难恢复

7. 社交技能

我不确定关于 DBA的社交技能他们想说什么,当我本周快速检查以确保列表仍然是最新的时,社交技能在列表中的排名甚至更高:排在第 5 位,而不是第 16 位!

8. 高可用性

9. 复制

10. 集群

11. DevOps 和自动化方法及工具

 

 

有很多事情需要了解和做!


哦,更难理解的是,DBA 有各种不同的“类型”。


传统上分为生产 DBA 和开发 DBA,开发 DBA 与开发人员密切合作,专注于构建和维护支持应用程序开发的数据库环境。然后通常将事情交给生产 DBA,生产 DBA 确保生产环境中的数据库保持正常运行,重点关注可用性、性能和安全性等问题。


也许您是组织中的开发 DBA。



在一些组织中,职责分为应用程序 DBA(关注数据库的逻辑、应用程序相关方面)和系统 DBA(负责底层软件和物理基础设施)。

在这种情况下,您可能是应用程序 DBA。


除了生产 DBA 和开发 DBA、应用程序 DBA 和系统 DBA,您还会听到数据仓库 DBA、云 DBA、数据库架构师甚至复制 DBA 或备份和恢复 DBA仅负责数据库管理的一个方面。

 这些不同类型的 DBA 角色因组织而异,甚至因团队而异。职责划分不一定明确,角色经常重叠。


幸运的是,你真的不需要成为所有这些方面的专家。


我非常喜欢凯蒂·麦克劳克林在波尔图举行的 2022 年欧洲 DjangoCon 上的主题演讲“你应该担心什么”。凯蒂指出,虽然你绝对可以通过创建服务器、安装 Django、Postgres 和 nginx 并将其提供给全世界来运行 Django,但还有各种各样的事情需要担心,包括:

1. 服务器和网络可用性。

2. OS、Django、nginx 和 Postgres 更新。

3. 数据库迁移。

4. 数据库管理。

5. 备份。

 

如果您就是那个担心这些事情的人,凯蒂会问“您是 Django 开发人员吗,或者您是 Django 开发人员、数据库管理员、系统管理员、网络管理员和全栈工程师的结合体,而且薪水严重过低吗?”


您绝对不需要了解数据库的所有内容。我当然不了解应用程序开发的所有知识,甚至这句话听起来好像我知道的比实际多得多。


我知道的只是足以帮助开发人员解决与数据库相关的问题。同样,您只需要了解足够的数据库知识来帮助您进行应用程序开发。

 

这是我去年 9 月在 PyCon UK 上发表的题为“如何让数据库保持良好状态”的演讲的议程。我给出了 5 条建议,您可以轻松实施这些建议,以确保拥有一个强大、高效的数据库环境

1. 检查一些关键配置参数是否针对您的环境和工作负载正确设置

2. 确保定期备份数据库(并测试恢复过程)

3. 建立高可用性架构

4. 确保正确的用户/应用程序可以连接并与数据库交互

5. 确保你知道发生了什么,并且如果出现问题可以迅速做出反应

 

我用了大约 3 分钟的时间概述了如何完成每件事。有趣的是,这段时间并不足以详细介绍管理数据库所需的所有知识,即我过去 25 年学习的所有知识。

而这些只是与生产/系统方面有关的内容。我们甚至没有开始考虑应用程序方面的内容:数据库设计、查询设计和性能调整、连接管理、存储过程、事务管理等等。

 

但您不需要详细了解这些内容。最重要的是要知道这些想法和概念的存在,并知道在需要时在哪里查找和向谁询问更多信息。

当我进行这种类型的演示时,我总是会包含相关文档或其他有用资源的链接,因为我知道我无法在 30 分钟的演讲中涵盖所有内容,即使我做到了,人们也不会记住我说的大部分内容。


如果当你必须实施某件事时,或者当你遇到问题时,你会想

“哦,我依稀记得凯伦说过这件事。”

并且你可以去阅读它,那么我会觉得我做了一些有用的事情。

 

如果您没有时间、技能、意愿或基础设施来完成管理数据库所需的所有工作,那么有多种选择,包括托管服务,可以为您完成所有工作。


大型云提供商提供托管数据库服务,我工作的公司 (Crunchy Data) 有一项名为 Crunchy Bridge 的托管 PostgreSQL 服务,还有很多其他服务。即使您有技能和意愿,将其中一些任务外包出去。可能更能充分利用您作为应用程序开发人员的时间和专业知识。

 

那么,回到 DBA 职责列表,您实际上必须了解或能够自己完成哪些任务?

1. 了解数据库备份和恢复的工作原理绝对很有用。您可能需要自己为开发环境执行此操作,您可能希望确保为所选的托管数据库服务制定合理的备份流程,并且您肯定希望测试恢复数据库,以防出现严重问题。

2. 您可能不是设计和执行数据库安全策略的人,但在决定谁应该拥有和操作数据库对象、哪些用户应该连接到数据库以及如何连接等时,记住一些最佳实践(例如最小特权和职责分工原则)会很有帮助。

3. 您可能不会负责实施数据库监控,但至少了解数据库仪表板上显示的某些指标的含义可能是一个有价值的调试工具。

4. 从我的角度来看,数据建模是必须的。了解系统中的数据是什么样子以及它们如何组合在一起,在寻找编写访问和更新数据的代码的最佳方法时会非常有帮助。

5. 希望您不需要进行全天候支持,但能够进行一些基本的数据库故障排除 可以为您节省大量时间 - 调试连接错误,找出数据库崩溃的原因,理解为什么(并解决)某个查询的性能突然下降。

6. 希望软件安装和升级可以留给其他人,特别是当您使用托管服务时。

 

 

尽管成为一名“数据库专家”不太可能成为你的职责范围,但如果你能理解一些数据库方面的东西并向团队其他成员解释,这可能会给你带来帮助。

1. 能够找出某个查询或应用程序的某个部分性能不佳的原因并能够改进性能绝对很重要。更好的方法是首先学习如何编写针对数据库性能良好的代码。

2. 容量规划可能不在您的职权范围内,但最好了解数据库所使用的资源以及它们的预期增长方式,以便您可以设计应用程序来应对。

3. 许多组织正在实施自动化流程来创建数据库集群和单个数据库。如果您使用的是托管服务,则可能会有一个 API。即使如此,对一些最常见的参数有基本的了解也很有帮助,以确保在创建数据库时将它们设置为适合您用例的值。

4. 希望“其他人”能够处理一般的数据库维护任务,特别是如果您使用的是托管服务。同样,熟悉自动清理、重建索引、刷新物化视图、保持统计信息最新等基本知识很有帮助,这样您就能意识到这些流程可能对您的应用程序产生的影响(无论是不保持领先地位的负面影响,还是运行某些流程的潜在影响)。

5. 这可能真的很麻烦,但确保遵守数据保护/GDPR规则是每个人的责任。这不是数据库管理特定的任务,但它与数据库紧密相关。

 


回到 DBA 技能和能力列表;您实际上需要其中哪些?


1. 我知道,每个人都在使用 ORM。但是,如果你想了解 ORM 的作用,以及查询可能出现错误的原因,最好的方法就是理解并能够编写自己的SQL查询

2. 您不需要了解很多不同的数据库技术- 只需了解您实际使用的数据库技术。显然,我几乎在任何情况下都会推荐使用 PostgreSQL,但您可能有理由使用其他数据库。

3. 我已经讨论过性能调整和灾难恢复

4. 在 Django 社区呆了一段时间后,我想说你的社交技巧总体来说还不错!

5. 而且您可能已经对DevOps和自动化有了至少与普通 DBA 一样多的了解。

 

译者注:ORM是Object-Relational Mapping(对象关系映射)的缩写,这是一种在编程中用于将对象模型映射到关系型数据库模型的技术。ORM允许开发者使用面向对象的方式来操作数据库——创建、查询、更新和删除数据,而不需要编写复杂的SQL语句。

 

通过查看我为开发者活动撰写的一些演讲的标题, 你可以了解一些我认为对你有用的事情:

1. 如何保证数据库正常运行(如前所述)

2. 如何调整 PostgreSQL 以使其运行得更好, 讨论了一些最有用的 PostgreSQL 配置参数以及如何根据您的用例将它们设置为正确的值。

3. 针对 Analytics 调整数据库 需要考虑在数据库上运行混合工作负载的影响,以及如何最大限度地减少其对性能的影响。

4. 您想了解关于数据库的一切,但又不敢向您的 DBA 询问, 从“什么是数据库实例?”和“视图和物化视图之间有什么区别?”到“如何读取查询执行计划?”,您可以找到各种问题的答案。

5. 面向开发人员的数据库故障排除 解释了如何识别和修复您会遇到的最常见的数据库问题。

6. Postgres 是如何被误用和滥用的,是为开发 PostgreSQL 本身的人们撰写的。目的是鼓励我们反思作为一个项目可以做些什么,以使学习和使用 Postgres 的过程尽可能简单。

 

PostgreSQL 文档

PostgreSQL 会议的演讲录音(很多都可以在 YouTube 上搜索到)

PostgreSQL 会议

PostgreSQL 书籍

教程,例如Crunchy Data Postgres Playground

 


结语

希望您一旦了解了其中的一些内容,就能够自豪地谈论“我如何学会不再担心并爱上数据库”。

我附上了未注释的 PDF 版幻灯片链接和一些联系方式,以便您与我联系,或关注我以了解更多数据库方面的信息。

 

Mastodon:@karenhjex@mastodon.online

Twitter/X:@karenhjex

 

参考:

[1]  fatherly.com:孩子长大后想做什么

https://www.fatherly.com/love-money/work-money/the-2017-imagination-report-what-kids-want-to-be-when-they-grow-up/

[2] statista.com:中国/美国/英国的童年志向

https://www.statista.com/chart/28802/childhood-aspirations-in-china-us-uk/

[3] Moneypeny.com:你想成为什么样的人?

https://www.moneypenny.com/us/resources/blog/what-did-you-want-to-be/

[4] reed.co.uk:你的孩子长大后真正想做什么

https://www.reed.co.uk/career-advice/revealed-what-your-kids-really-want-to-be-when-they-grow-up/

[5] itjobswatch.co.uk:DBA 职位

https://www.itjobswatch.co.uk/jobs/uk/dba.do


文章转载自开源软件联盟PostgreSQL分会,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论