arrow_back

Cloud SQL for PostgreSQL 数据库可观测性和调优

登录 加入
访问 700 多个实验和课程

Cloud SQL for PostgreSQL 数据库可观测性和调优

实验 1 小时 universal_currency_alt 1 个积分 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
访问 700 多个实验和课程

GSP921

Google Cloud 自学实验的徽标

概览

在本实验中,您将使用 SQL Insights 分析 Cloud SQL 数据库性能。您将修改现有的 Google Kubernetes Engine (GKE) 应用,使用 SQLcommenter 库为应用查询添加注释,这将有助于您在应用中确定查询的来源。

您必须创建或配置为每项任务指定的服务和资源,并且必须遵循所提供的详细说明,才能成功完成每项任务。

目标

在本实验中,您将学习如何执行以下任务:

  • 配置和利用 SQL Insights。
  • 将应用配置为使用 SQLcommenter。
  • 采取措施来调优和优化数据库,以提升性能。

设置和要求

点击“开始实验”按钮前的注意事项

请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。

此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。

为完成此实验,您需要:

  • 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
  • 完成实验的时间 - 请注意,实验开始后无法暂停。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。

如何开始实验并登录 Google Cloud 控制台

  1. 点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。左侧是“实验详细信息”窗格,其中包含以下各项:

    • “打开 Google Cloud 控制台”按钮
    • 剩余时间
    • 进行该实验时必须使用的临时凭据
    • 帮助您逐步完成本实验所需的其他信息(如果需要)
  2. 点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。

    该实验会启动资源并打开另一个标签页,显示“登录”页面。

    提示:将这些标签页安排在不同的窗口中,并排显示。

    注意:如果您看见选择账号对话框,请点击使用其他账号
  3. 如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。

    {{{user_0.username | "<用户名>"}}}

    您也可以在“实验详细信息”窗格中找到“用户名”。

  4. 点击下一步

  5. 复制下面的密码,然后将其粘贴到欢迎对话框中。

    {{{user_0.password | "<密码>"}}}

    您也可以在“实验详细信息”窗格中找到“密码”。

  6. 点击下一步

    重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。 注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
  7. 继续在后续页面中点击以完成相应操作:

    • 接受条款及条件。
    • 由于这是临时账号,请勿添加账号恢复选项或双重验证。
    • 请勿注册免费试用。

片刻之后,系统会在此标签页中打开 Google Cloud 控制台。

注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。 “导航菜单”图标和“搜索”字段

激活 Cloud Shell

Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。

  1. 点击 Google Cloud 控制台顶部的激活 Cloud Shell “激活 Cloud Shell”图标

  2. 在弹出的窗口中执行以下操作:

    • 继续完成 Cloud Shell 信息窗口中的设置。
    • 授权 Cloud Shell 使用您的凭据进行 Google Cloud API 调用。

如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 Project_ID 。输出内容中有一行说明了此会话的 Project_ID

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud 是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。

  1. (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
  1. 点击授权

输出:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (可选)您可以通过此命令列出项目 ID:
gcloud config list project

输出:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注意:如需查看在 Google Cloud 中使用 gcloud 的完整文档,请参阅 gcloud CLI 概览指南

启用 API

您必须启用本实验所需的 API。您将在后续任务中构建容器并将其推送到 Artifact Registry,因此您必须先启用 Artifact Registry API。

  • 在 Cloud Shell 中,运行以下命令:
gcloud services enable sqladmin.googleapis.com gcloud services enable artifactregistry.googleapis.com

获取 Kubernetes 集群的凭证

  • 在实验开始时,您必须为部署的 Kubernetes 集群配置身份验证。此过程会在主文件夹内隐藏的 .kube 文件夹中创建一个 config 文件。
export ZONE={{{project_0.default_zone | Zone}}} gcloud container clusters get-credentials postgres-cluster --zone=$ZONE

运行 gMemgen 应用

  1. 在浏览器中,转到负载均衡器的入站 IP 地址。

  2. 您可以使用以下命令在 Cloud Shell 中创建指向负载均衡器外部 IP 地址的可点击链接:

export LOAD_BALANCER_IP=$(kubectl get svc gmemegen-service \ -o=jsonpath='{.status.loadBalancer.ingress[0].ip}' -n default) echo gMemegen Load Balancer Ingress IP: http://$LOAD_BALANCER_IP
  1. 点击 Cloud Shell 中的相应链接,您将看到 gMemegen 应用在浏览器中运行。

任务 1. 使用 SQL Insights 检查 GKE 应用 SQL 查询

在此任务中,您将检查由 gMemegen 应用生成的查询。您需要通过该应用制作表情包,并在该应用的近期随机页面中查看这些表情包,从而产生一些流量。

对您的 Cloud SQL for PostgreSQL 实例启用 SQL Insights

若要完成此任务,您必须对 Cloud SQL 数据库启用 SQL Insights。

  1. 在 Cloud 控制台中,依次点击数据库 > SQL,然后选择 postgres-gmemegen 实例。

  2. 主实例菜单中,选择查询数据分析

  3. 点击启用按钮。

  4. 主实例 > 查询数据分析页面的热门查询和标记中,选择标记标签页。

  5. 点击存储应用标记

制作一些表情包并查看它们

在此步骤中,您将使用 gMemegen 应用制作至少四个新的表情包,并查看这些表情包。这样做是为了对应用进行测试,生成一些样本数据,并利用所有可用路由。

  1. 在 gMemegen 应用标签页中,前往主页并选择一张图片。

  2. 在新建表情包页面中,在顶部和底部文本框中输入文本。您可以制作您想到的任何表情包。

  3. 点击提交按钮。您将看到界面上显示了新的表情包。

  4. 使用浏览器的返回按钮返回。

  5. 点击近期菜单项,查看您最近创作的表情包。

  6. 点击已排序菜单项,查看按顶部文本的字母顺序排序的表情包。

  7. 点击随机菜单项,随机查看一个表情包。关闭浏览器中的随机标签页。

  8. 点击主页菜单项返回主页,您可以在这里创建新的表情包。

重复执行上述 1 到 8 点,直到制作出至少 4 个新的表情包。

六个精选的表情包示例

使用 SQL Insights 检查 gMemegen 应用的数据库活动

  1. 主实例菜单中,转到查询数据分析

  2. 打开数据库字段中的下拉菜单,然后选择 gmemegen_db。如果未在列表中看到 gmemegen_db,请刷新页面。gmemegen_db 可能需要一段时间才能在列表中显示。您可以通过在 gMemegen 应用中执行更多操作来产生更多数据库流量,从而加速这一过程。

gmemegen_db 数据库项

  1. 向下滚动到热门查询和标记部分,请注意,由 gMemegen 应用生成的查询列在查询标签页中。

“查询”标签页

  1. 点击标记标签页,请注意,此时没有列出任何标记。

SQL Insights 无法区分查询的来源,因为这些查询没有标记。有一个名为 SQLcommenter 的数据库开发者工具,可以通过向应用查询附加注释来提供帮助,这些注释将在此视图中填充标记。这对于开发者和测试人员跟踪应用查询的来源、协助调试和优化非常有用。

您应该记下当前时间,以便比较在应用代码中加入 SQLcommenter 库前后 SQL Insights 的结果。

点击“检查我的进度”以验证是否完成了以下目标: 使用 SQL Insights 检查 GKE 应用 SQL 查询。

任务 2. 对 GKE 应用启用 SQLcommenter

在此任务中,您将修改 gMemegen 应用,使其包含 SQLcommenter 库代码;这些代码将为应用查询添加注释,提高其在 SQL Insights 中的实用性。

修改 gMemegen 应用并重建源代码

在此步骤中,您将修改 gMemegen 应用的 main.py Python 应用代码,以启用 SQLcommenter。代码已经包含了这些更改,只需取消注释即可,这只需一个简单的 sed 命令即可实现。您还将重建该应用,并将新的映像存储在 Artifact Registry 中。

  1. 在 Cloud Shell 中,下载 gMemegen 应用源代码:
gsutil -m cp -r gs://spls/gsp921/gmemegen .

若要启用 SQLcommenter,您需要在 gmemegen/app/main.py Python 文件中移除以下代码块的注释,以便配置该应用,使其使用 SQLcommenter 为查询添加标记。

##from sqlalchemy import event ##from google.cloud.sqlcommenter.sqlalchemy.executor import BeforeExecuteFactory app = Flask(__name__) app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False ##app.config['SQLALCHEMY_RECORD_QUERIES'] = True app.config['SQLALCHEMY_ECHO'] = True app.config['SQLALCHEMY_DATABASE_URI'] = get_db_uri() db = SQLAlchemy(app) ##listener = BeforeExecuteFactory(with_db_driver=True) ##event.listen(db.engine, 'before_cursor_execute', listener, retval=True)
  1. 在 Cloud Shell 中,若要取消注释用于启用 SQLcommenter 的 gMemegen 应用代码,请运行以下命令:
sed -i 's/##//g' gmemegen/app/main.py
  1. 在 Cloud Shell 中,为了识别更新后的版本,请更改该应用的标题模板:
sed -i 's/gMemegen/gMemegen (SQLcommenter)/g' gmemegen/app/templates/header.html

构建新映像并将其推送到 Artifact Registry

在此步骤中,您将构建经过修改的应用代码,并将映像推送到 Artifact Registry,标记为版本 2。

  1. 为 Artifact Registry 配置 Docker 身份验证: export REGION={{{project_0.default_region | REGION}}} gcloud auth configure-docker ${REGION}-docker.pkg.dev

如果系统要求您确认,请输入 Y

  1. 创建制品库:

    export REPO=gmemegen gcloud artifacts repositories create $REPO \ --repository-format=docker --location=$REGION
  2. 构建新映像并将其推送到 Artifact Registry:

    cd gmemegen export PROJECT_ID=$(gcloud config list --format 'value(core.project)') gcloud builds submit --tag ${REGION}-docker.pkg.dev/${PROJECT_ID}/gmemegen/gmemegen-app:v2

构建和推送过程需要几分钟才能完成。完成后,输出内容应表明构建成功,如下所示。

输出:

ID: 801538cf-f0e5-43b4-b0e4-5071ad026bf3 CREATE_TIME: 2022-08-10T18:41:21+00:00 DURATION: 1M27S SOURCE: gs://qwiklabs-gcp-04-2dea2c1461c0_cloudbuild/source/1660156876.254161-89dl7080030e49f28e42ab7dc207d91a.tgz IMAGES: us-east1-docker.pkg.dev/qwiklabs-gcp-04-2dea2c1461c0/gmemegen/gmemegen-app:v2 STATUS: SUCCESS

点击“检查我的进度”以验证是否完成了以下目标: 对 GKE 应用启用 SQLcommenter。

任务 3. 重新部署 gMemegen 应用

在此任务中,您将重新部署修改后的 gMemegen 应用。然后,您就可以使用 SQL Insights 对两版应用的查询进行比较。

  1. 在 Cloud Shell 中,运行以下命令,使用您的项目 ID、Cloud SQL 连接名称和区域更新部署 YAML:

    export CLOUDSQL_INSTANCE=postgres-gmemegen export CONNECTION_NAME=$(gcloud sql instances describe $CLOUDSQL_INSTANCE --format 'value(connectionName)') sed -i "s/CONNECTION-NAME/${CONNECTION_NAME}/g" gmemegen_canary_deployment.yaml export PROJECT_ID=$(gcloud config list --format 'value(core.project)') sed -i "s/PROJECT-ID/${PROJECT_ID}/g" gmemegen_canary_deployment.yaml export REGION={{{project_0.default_region | REGION}}} sed -i "s/us-central1/${REGION}/g" gmemegen_canary_deployment.yaml
  2. 在 Cloud Shell 中,运行以下命令来重新部署应用:

kubectl apply -f gmemegen_canary_deployment.yaml
  1. 在 Cloud Shell 中,重新部署负载均衡器,选择应用的 2.0 版本

    sed -i "s/1.0/2.0/g" gmemegen-service.yaml kubectl apply -f gmemegen-service.yaml
  2. 在 Cloud Shell 中,运行以下命令来检查部署是否成功:

kubectl get pods

输出:

NAME READY STATUS RESTARTS AGE gmemegen-7975bf9776-fl7g9 2/2 Running 0 7m46s gmemegen-canary-7cc8687cfc-rqx4h 2/2 Running 0 33s

现在,您已运行新部署的 gMemegen 应用。

点击“检查我的进度”以验证是否完成了以下目标: 重新部署 gMemegen 应用。

任务 4. 在 SQL Insights 中查看应用查询

在此任务中,您将返回 SQL Insights,以查看更新版应用的数据库活动,包括 SQLcommenter。您首先需要使用新版应用制作一些表情包,以便生成更多数据库活动。

制作一些新的表情包

在此步骤中,您将使用在任务 3 中部署的新版应用制作新的表情包。请注意,在菜单栏中,该应用的名称旁边会显示 (SQLcommenter),这表明它是新应用。

gMemegen(SQLcommenter) 应用

  • 切换到 gMemegen 应用标签页,通过制作一些新的表情包并点击几次近期已排序链接,产生一些数据库流量。

在 SQL Insights 中查看应用查询

在此步骤中,您将查看来自新部署应用的查询,请注意由 SQLcommenter 插入的标记。

  1. 在 Cloud 控制台标签页中,依次选择主实例 > 查询数据分析页面,然后选择热门查询和标记中的标记标签页。

  2. 点击负载(按总时长)列名称。这应该会刷新已标记查询的列表,显示由 SQLcommenter 标记的所有近期查询。

请注意,控制器路由数据库驱动程序框架标记现已填充。

如果您无法在标记标签页中看到此查询,请刷新网页,点击标记标签页,然后再次点击负载(按总时长)列名称。

“标记”标签页 (续 - 因宽度限制) “标记”标签页(续)

在 SQL Insights 中识别运行缓慢的查询

在此步骤中,您将分析应用查询的性能,以识别运行缓慢的查询。

  1. Cloud 控制台查询数据分析页面中,向下滚动到热门查询和标记

“查询”标签页

  1. 点击标记标签页。

  2. 路由列中选择带有 /sorted 的标记。

它应该具有最高的负载(用绿色指示条表示),但由于实验中的数据量相对较小,情况可能并非如此。实验中的查询延迟时间图表可能只会显示少量数据点,但通过其他数据,您可以查看延迟时间较长(P95 和 P99)的查询的值。

“查询延迟时间”图表

  1. 使用浏览器中的返回按钮返回热门查询和标记视图。或者,您也可以使用查询数据分析页面顶部的面包屑导航,选择 postgres-gmemegen 实例。

  2. 选择路由列中的 /recent 标记,该标记的负载和延迟应该稍低一些。同样,在您的实验中,这将仅显示可能与 /sorted 路由没有太大差异的数据点结果。

“查询延迟时间”图表

这些查询返回的行数大致相同。它们的性能为何不同?答案在于,meme.id 字段是 meme 表的主键,因此已编入索引;而 meme.top_text 字段未编入索引,因此运行时间较长。

注意:由于 gmemegen_db 数据库非常小,只包含您在本实验期间通过界面生成的那几行,因此这两种路由在性能上的差异可能并不明显,甚至难以察觉。在生产环境中,用于对已编入索引以及未编入索引的字段进行排序的查询,其性能差异肯定会很明显。

任务 5. 采取措施来调优和优化数据库,以提升性能

在此任务中,您将修改 gmemegen_db 数据库,以修复在上一个任务中发现的运行缓慢的查询。

向 Cloud SQL for PostgreSQL 数据库添加索引

在此步骤中,您将向数据库列添加索引,以提高性能。

  1. 在 Cloud 控制台中,前往主实例 > 概览页面,在连接到此实例部分,点击打开 Cloud Shell。Cloud Shell 控制台中将自动填充一条命令。运行这条命令。

  2. 在系统提示时,输入密码 supersecret!

  3. psql 中的 postgres=> 提示符处,运行以下命令:

    \c gmemegen_db
  4. 系统会再次提示您输入密码。输入 supersecret!

  5. psql 中的 gmemegen_db=> 提示符处,运行以下命令:

CREATE INDEX idx_meme_top_text ON meme(top_text);
  1. 打开 gMemegen 应用标签页,然后点击已排序链接几次,以生成一些新的查询。

检查查询的性能

目前,我们已为排序的列添加索引;在此步骤中,您将检查运行缓慢的查询的性能。

  1. 在 Cloud 控制台中,前往主实例 > 查询数据分析页面,在热门查询和标记下的标记标签页上,再次选择 /sorted 标记。

  2. 向下滚动到查询延迟时间图表,请注意,延迟时间现在应该减少了。

“查询延迟时间”图表

注意:由于数据库中的数据量相对较小,您的实验可能不会产生明显的差异。

点击“检查我的进度”以验证是否完成了以下目标: 采取措施来调优和优化数据库,以提升性能。

您已完成本实验。

恭喜!

完成挑战任务

本自学实验是在 Cloud SQL 上管理 PostgreSQL 数据库挑战任务的组成部分。一项挑战任务就是一系列相关的实验,学习时按部就班地完成这些实验即可。完成挑战任务即可赢得一枚徽章,以表彰您取得的成就。您可以公开展示徽章,还可以在您的在线简历或社交媒体账号中加入指向徽章的链接。欢迎注册参加此挑战任务,完成后就能立即获得相应的积分。请参阅 Google Cloud Skills Boost 目录,查看所有可参加的挑战任务。

上次更新手册的时间:2024 年 7 月 4 日

上次测试实验的时间:2024 年 7 月 4 日

版权所有 2025 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

使用无痕浏览模式

  1. 复制系统为实验提供的用户名密码
  2. 在无痕浏览模式下,点击打开控制台

登录控制台

  1. 使用您的实验凭证登录。使用其他凭证可能会导致错误或产生费用。
  2. 接受条款,并跳过恢复资源页面
  3. 除非您已完成此实验或想要重新开始,否则请勿点击结束实验,因为点击后系统会清除您的工作并移除该项目

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

请使用无痕模式或无痕式浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。