GSP1087

概览
AlloyDB for PostgreSQL 是一项兼容 PostgreSQL 的全托管式数据库服务,适用于要求严苛的企业数据库工作负载。AlloyDB 结合了 Google 的技术精华和最受欢迎的开源数据库引擎之一 PostgreSQL,可提供卓越的性能、扩缩能力和可用性。
列式引擎可以显著加快 AlloyDB 处理 SQL 扫描、联接和汇总的速度。列式引擎提供以下功能:1) 列存储区,其中包含所选列的表数据(重新整理为面向列的格式);2) 列式查询规划工具和执行引擎,支持在查询中使用列存储区。
在本实验中,您将探索 AlloyDB 列式引擎的功能。
您将执行的操作
在本实验中,您将学习如何执行以下任务:
- 创建基准数据集以测试列式引擎
- 运行基准测试
- 验证列式引擎的数据库标志
- 设置或验证列式引擎的数据库扩展程序
- 测试列式引擎
设置和要求
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。
为完成此实验,您需要:
- 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。
如何开始实验并登录 Google Cloud 控制台
-
点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。左侧是“实验详细信息”窗格,其中包含以下各项:
- “打开 Google Cloud 控制台”按钮
- 剩余时间
- 进行该实验时必须使用的临时凭据
- 帮助您逐步完成本实验所需的其他信息(如果需要)
-
点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。
该实验会启动资源并打开另一个标签页,显示“登录”页面。
提示:将这些标签页安排在不同的窗口中,并排显示。
注意:如果您看见选择账号对话框,请点击使用其他账号。
-
如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。
{{{user_0.username | "<用户名>"}}}
您也可以在“实验详细信息”窗格中找到“用户名”。
-
点击下一步。
-
复制下面的密码,然后将其粘贴到欢迎对话框中。
{{{user_0.password | "<密码>"}}}
您也可以在“实验详细信息”窗格中找到“密码”。
-
点击下一步。
重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。
注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
-
继续在后续页面中点击以完成相应操作:
- 接受条款及条件。
- 由于这是临时账号,请勿添加账号恢复选项或双重验证。
- 请勿注册免费试用。
片刻之后,系统会在此标签页中打开 Google Cloud 控制台。
注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。
激活 Cloud Shell
Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。
-
点击 Google Cloud 控制台顶部的激活 Cloud Shell
。
-
在弹出的窗口中执行以下操作:
- 继续完成 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 自动补全功能。
- (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
- 点击授权。
输出:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (可选)您可以通过此命令列出项目 ID:
gcloud config list project
输出:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注意:如需查看在 Google Cloud 中使用 gcloud 的完整文档,请参阅 gcloud CLI 概览指南。
任务 1. 创建基准数据集以测试列式引擎
在本实验环境中,系统会在您开始实验时预配 AlloyDB 集群和实例。
- 在 Google Cloud 控制台中,依次点击导航菜单
> 查看所有产品。然后,在数据库下选择 AlloyDB for PostgreSQL。
在 AlloyDB 页面上,有一个名为 lab-cluster 的集群和一个名为 lab-instance 的实例。实例需要几分钟时间才能完全创建和初始化。
请等待资源名称列中名为 lab-instance 的实例旁边显示绿色对勾标记(“准备就绪”状态),然后再继续执行下一步。
- 在名为 lab-instance 的实例所在行中,将专用 IP 地址下的专用 IP 地址(例如
10.100.0.2)复制到文本文件中,以便在后续步骤中粘贴该值。请勿包含英文冒号和端口号 (:5432)。
如需评估列式引擎的功能,您需要一个足够大的数据集来衡量性能。在接下来的步骤中,您将使用 PostgreSQL 工具 pgbench 生成一个合成数据集,以评估列式引擎。
-
在导航菜单 (
) 中,点击 Compute Engine 下的虚拟机实例。
-
对于名为 alloydb-client 的实例,在连接列中点击 SSH,打开一个终端窗口。
-
设置以下环境变量,并将 ALLOYDB_ADDRESS 替换为 AlloyDB 实例的专用 IP 地址。
export ALLOYDB=ALLOYDB_ADDRESS
- 运行以下命令,将 AlloyDB 实例的专用 IP 地址存储在 AlloyDB 客户端虚拟机上,以便在整个实验过程中保留该地址。
echo $ALLOYDB > alloydbip.txt
- 使用 pgbench 的第一步是创建并填充示例表。运行以下命令以创建四个表。系统会提示您输入 postgres 用户的密码,即 Change3Me。
最大的表 pgbench_accounts 将加载 5,000 万行。此操作需要几分钟时间才能完成。
pgbench -h $ALLOYDB -U postgres -i -s 500 -F 90 -n postgres
dropping old tables...
NOTICE: table "pgbench_accounts" does not exist, skipping
NOTICE: table "pgbench_branches" does not exist, skipping
NOTICE: table "pgbench_history" does not exist, skipping
NOTICE: table "pgbench_tellers" does not exist, skipping
creating tables...
generating data (client-side)...
50000000 of 50000000 tuples (100%) done (elapsed 91.26 s, remaining 0.00 s)
creating primary keys...
done in 167.61 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 93.16 s, primary keys 74.43 s).
- 连接到 psql 客户端并运行以下查询,以验证 pgbench_accounts 表中的行数。系统会提示您输入 postgres 用户的密码,即 Change3Me。
psql -h $ALLOYDB -U postgres
select count (*) from pgbench_accounts;
count
----------
50000000
(1 row)
点击检查我的进度,验证已完成以下目标:
创建基准数据集
任务 2. 运行基准测试
为了进行评估,您可以运行一个执行顺序扫描的简单查询,然后在将测试表添加到列式引擎之前和之后,使用说明查询计划来查看该查询的执行情况。
- 返回 alloydb-client shell。psql 客户端应仍处于活动状态。否则,请按照任务 1 中的说明重新连接。运行以下查询,以针对所有查询操作启用计时。
\timing on
- 接下来,运行以下查询来评估运行时间。此查询对整个 pgbench_accounts 表执行顺序扫描。
注意:此示例查询仅用于演示,因此返回的行数上限为 20。
SELECT aid, bid, abalance FROM pgbench_accounts WHERE bid < 189 OR abalance > 100 LIMIT 20;
aid | bid | abalance
-----+-----+----------
1 | 1 | 0
2 | 1 | 0
3 | 1 | 0
4 | 1 | 0
5 | 1 | 0
6 | 1 | 0
7 | 1 | 0
8 | 1 | 0
9 | 1 | 0
10 | 1 | 0
11 | 1 | 0
12 | 1 | 0
13 | 1 | 0
14 | 1 | 0
15 | 1 | 0
16 | 1 | 0
17 | 1 | 0
18 | 1 | 0
19 | 1 | 0
20 | 1 | 0
(20 rows)
- 运行以下查询,为不受限制的查询生成说明计划。您的值应与示例输出中的值类似,但会因数据生成的随机性而有所不同。
注意:您可能需要按空格键才能继续查看查询说明计划。
EXPLAIN (ANALYZE,COSTS,SETTINGS,BUFFERS,TIMING,SUMMARY,WAL,VERBOSE)
SELECT count(*) FROM pgbench_accounts WHERE bid < 189 OR abalance > 100;
QUERY PLAN
---------------------------------------------------------------------------------------------------------------
---------------------------------------------------
Finalize Aggregate (cost=1242226.53..1242226.54 rows=1 width=8) (actual time=11010.409..11014.083 rows=1 loop
s=1)
Output: count(*)
Buffers: shared hit=20921 read=888170
I/O Timings: read=19536.769
-> Gather (cost=1242226.32..1242226.53 rows=2 width=8) (actual time=11010.398..11014.075 rows=3 loops=1)
Output: (PARTIAL count(*))
Workers Planned: 2
Workers Launched: 2
Buffers: shared hit=20921 read=888170
I/O Timings: read=19536.769
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!! Section removed for pasting !!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Filter: ((pgbench_accounts.bid < 189) OR (pgbench_accounts.abalance > 100))
Rows Removed by Filter: 10400000
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!! Section removed for pasting !!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Buffers: shared hit=6
Planning Time: 0.117 ms
Execution Time: 11014.169 ms
(38 rows)
-
在结果中,请特别注意 Planning Time(规划时间)和 Execution Time(执行时间)值。在示例输出中,规划时间为 0.117 毫秒,执行时间为 11014.169 毫秒,即 11.014 秒。您的值应与示例输出中的值类似,但会因数据生成的随机性而有所不同。
-
将运行中的规划时间和执行时间值复制到文本文件中,以便稍后与启用列式引擎后的结果进行比较。您还可以将整个查询计划结果复制到文本文件中。
-
按 Q 键可关闭查询计划。
任务 3. 验证列式引擎的数据库标志
在此任务中,您将检查实例中的列式引擎数据库标志。
-
在 Google Cloud 控制台中,依次点击导航菜单 (
) > 查看所有产品。然后,在数据库下选择 AlloyDB for PostgreSQL。
-
在名为 lab-instance 的实例所在的行中,点击操作(三个竖点的图标),然后点击修改。
-
展开名为高级配置选项的部分。
-
在标志下,点击添加数据库标志。
-
点击选择标志,浏览可用标志列表,了解受支持的选项。
请注意,名为 google_columnar_engine.enabled 的标志已启用(状态为“已启用”)。在本实验中,您不用添加其他标志。
- 点击取消以退出修改实例页面。
任务 4. 设置或验证列式引擎的数据库扩展程序
承接上一部分,在此任务中,您将设置数据库扩展程序,以便为 AlloyDB 集群完全启用列式引擎功能。
与配置标志不同,您必须通过 psql 客户端连接到实例,才能启用数据库扩展程序。
-
返回 alloydb-client shell。psql 客户端应仍处于活动状态。否则,请按照任务 1 中的说明重新连接。
-
运行以下查询,确保您已连接到 postgres 数据库。
\c postgres
- 运行以下系统查询,查看数据库中已启用的扩展程序的详细信息。
注意:您的扩展程序列表可能会有所不同。
\dx
List of installed extensions
Name | Version | Schema | Description
------------------------+---------+------------+---------------------------------------
google_columnar_engine | 1.0 | public | Google extension for columnar engine
google_db_advisor | 1.0 | public | Google extension for Database Advisor
hypopg | 1.3.2 | public | Hypothetical indexes for PostgreSQL
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
(4 rows)
- 如果列表中显示 google_columnar_engine,请跳至下一个任务(任务 5)。如果列表中未显示 google_columnar_engine,请运行以下命令。
CREATE EXTENSION IF NOT EXISTS google_columnar_engine;
- 再次运行扩展程序查询,确认 google_columnar_engine 扩展程序已启用。
\dx
任务 5. 测试列式引擎
由于您的主表 (pgbench_accounts) 相对较小,因此您可以直接将其添加到列式引擎以进行评估。在实际部署中,您会利用列式引擎的建议框架自动识别所有表中最常用的列,这些列通过该引擎管理可带来最大收益。
- 返回 alloydb-client shell。运行以下查询,将 pgbench_accounts 添加到列式引擎。查询需要几分钟才能完成。
SELECT google_columnar_engine_add('pgbench_accounts');
- 接下来,运行您之前运行的同一条说明计划查询,以查看列式引擎的效果。您的值应与示例输出中的值类似,但会因数据生成的随机性而有所不同。
EXPLAIN (ANALYZE,COSTS,SETTINGS,BUFFERS,TIMING,SUMMARY,WAL,VERBOSE)
SELECT count(*) FROM pgbench_accounts WHERE bid < 189 OR abalance > 100;
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Finalize Aggregate (cost=142400.72..142400.73 rows=1 width=8) (actual time=75.948..78.680 rows=1 loops=1)
Output: count(*)
-> Gather (cost=142400.51..142400.72 rows=2 width=8) (actual time=71.555..78.667 rows=3 loops=1)
Output: (PARTIAL count(*))
Workers Planned: 2
Workers Launched: 2
-> Partial Aggregate (cost=141400.51..141400.52 rows=1 width=8) (actual time=45.768..45.771 rows=1 loops=3)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Section removed for pasting
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Rows Removed by Columnar Filter: 10400000
Rows Aggregated by Columnar Scan: 4505600
Columnar cache search mode: native
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Section removed for pasting
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Buffers: shared hit=22 read=3 dirtied=1
I/O Timings: read=0.560
Planning Time: 2.022 ms
Execution Time: 78.804 ms
(29 rows)
-
在结果中,请特别注意规划时间和执行时间值。在启用列式引擎后的示例中,规划时间为 2.022 毫秒,而执行时间则为 78.804 毫秒。您的值应与示例输出中的值类似,但会因数据生成的随机性而有所不同。
-
在提供的示例中,列式引擎启用前和启用后的执行时间差为 10935.365 毫秒或 10.9 秒。这相当于执行时间缩短了 141 倍。在启用列式引擎后的示例中,您还会发现,超过 450 万行是使用列式扫描而非核心数据库引擎进行汇总的。
点击检查我的进度,验证已完成以下目标:
测试列式引擎
注意:如果您在完成所有任务后,分数未完全更新,请展开分数检查点框(页面右侧的黄色侧边栏),然后点击每项任务所对应的检查我的进度,从而更新分数。
恭喜!
现在,您已经了解了 AlloyDB 列式引擎的强大功能。
Google Cloud 培训和认证
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
上次更新手册的时间:2025 年 1 月 16 日
上次测试实验的时间:2025 年 12 月 15 日
版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。