这是本节的多页打印视图。
点击此处打印.
返回本页常规视图.
配置过程
此部分介绍设置 Vertica 数据库所需的任务。我们假设您拥有有效许可证密钥文件,已安装 Vertica rpm 包,并且已按照所述运行安装脚本。
您使用以下工具完成配置过程:
注意
您还可以使用
管理控制台执行某些任务。这些任务指向相应的主题。
继续配置
按照此部分所述的顺序完成配置过程。
Vertica 强烈建议您先尝试创建和配置数据库。
您可以在开发过程中多次使用此通用配置过程,也可以在每次使用时对其进行修改以便符合不断变化的目标。您可以忽略准备实际数据文件和示例查询等步骤,并运行 Database Designer,而无需针对查询进行优化。例如,对于开发和测试,您可以创建、加载和查询数据库多次,并在最后一次时创建并加载生产数据库。
1 - 准备磁盘存储位置
必须创建并指定目录,以便在其中存储编录和数据文件(
物理架构)。可以在安装或配置数据库时,或以后在数据库操作期间指定这些位置。编录和数据目录都必须归
数据库超级用户所有。
为数据库编录文件指定的目录(目录路径)将跨群集中的所有节点使用。例如,如果指定 /home/catalog 作为编录目录,Vertica 将在所有节点上使用该编录路径。编录目录应始终与任何数据文件目录相分离。
注意
请勿将一个共享目录用于多个节点。每个节点的数据目录和编录目录必须不同。多个节点不能写入相同的数据目录和编录目录。
指定的数据路径也将跨群集中的所有节点使用。指定应该将数据存储在 /home/data 后,Vertica 将在所有数据库节点上使用此路径。
不要使用单个目录包含编录和数据文件。可以在不同的驱动器上存储编录和数据目录,这些目录可能位于主机的本地驱动器(建议用于编录目录)或共享存储位置(例如外部磁盘存储模块或 SAN)上。
在指定编录或数据路径之前,确保数据库的所有节点上都存在父目录。在 admintools 中创建数据库还会创建编录和数据目录,但每个节点上必须存在父目录。
安装期间无需指定磁盘存储位置。但可以通过在 install_vertica
脚本中使用 --data-dir
参数来执行该操作。请参阅在安装期间指定磁盘存储位置。
1.1 - 指定数据库创建期间的磁盘存储位置
当您在
管理工具中调用创建数据库命令时,有个对话框允许您指定编录和数据位置。群集中的每个主机上都必须存在这些位置,并且这些位置必须归数据库管理员所有。
当单击确定 (OK) 时,Vertica 会自动创建以下子目录:
catalog-pathname/database-name/node-name_catalog/data-pathname/database-name/node-name_data/
例如,如果将
/home/dbadmin
的默认值(数据库管理员的主目录)用于 Stock Exchange 示例数据库,则将在群集中的每个节点上创建如下所示的编录和数据目录:
/home/dbadmin/Stock_Schema/stock_schema_node1_host01_catalog/home/dbadmin/Stock_Schema/stock_schema_node1_host01_data
注意
1.2 - 指定 MC 上的磁盘存储位置
可采用以下方法,使用 MC 界面指定在群集中存储数据库元数据的位置:
-
首次配置 MC 时
-
创建在 MC 上使用的新数据库时
另请参阅
配置管理控制台。
1.3 - 配置磁盘使用情况以优化性能
创建初始存储位置之后,以后可以向数据库中添加其他存储位置。此操作不仅可以提供更多空间,还可以用于通过隔离具有不同 I/O 或访问模式的文件来控制磁盘使用情况并提高 I/O 性能。例如,考虑:
另请参阅
管理存储位置
1.4 - 与 Vertica 一起使用共享存储
如果使用共享 SAN 存储,请确保在磁盘空间或宽带的节点之间不存在资源争夺情况。
1.5 - 查看数据库存储信息
您可以通过
管理控制台在 Vertica 群集上查看节点特定信息。有关详细信息,请参阅使用 MC 进行监控。
1.6 - 防病毒扫描排除项
您应从防病毒扫描中排除 Vertica 编录和数据目录。某些防病毒产品已被识别为针对 Vertica 目录,有时会锁定或删除其中的文件。这将对 Vertica 性能和数据完整性产生不利影响。
已识别的防病毒产品包括:
-
ClamAV
-
SentinelOne
-
Sophos
-
Symantec
-
Twistlock
重要
这份清单并不全面。
2 - Vertica 的磁盘空间要求
除了数据库中存储的实际数据外,Vertica 对若干数据重组操作均需磁盘空间,如
合并和在群集中管理节点。为获得最佳结果,Vertica 建议对于
K-安全=1 的数据库,每个节点的磁盘利用率不超过百分之六十 (60%) 以允许此类操作继续。
此外,某些查询执行运算符(如哈希联接和排序)若无法在内存 (RAM) 中完成,还会临时需要磁盘空间。您在查询、恢复、刷新投影等过程中可能会遇到此类运算符。所需的磁盘空间量(称为
临时空间)取决于查询性质、节点上的数据量以及系统上的并发用户数。默认情况下,数据磁盘上的任何未用磁盘空间均可用作临时空间。但是,Vertica 建议配置与数据磁盘空间分开的临时空间。
另请参阅
配置磁盘使用情况以优化性能。
3 - 管理控制台的磁盘空间要求
您可以在群集的任何节点上安装管理控制台,所以除了为数据库群集分配的磁盘空间外,它没有其他特殊的磁盘要求。
4 - 准备逻辑架构脚本
为 Vertica 数据库设计逻辑架构与为任何其他 SQL 数据库设计逻辑架构无任何区别。设计逻辑架构中更完整地描述了详细信息。
要创建逻辑架构,请准备一个 SQL 脚本(纯文本文件,扩展名通常为 .sql
)以执行下列操作:
-
创建其他架构(根据需要)。请参阅使用多个架构。
-
使用 CREATE TABLE 命令在数据库中创建表和列
约束。
-
使用 ALTER TABLE 命令定义必要的表约束。
-
使用 CREATE VIEW 命令定义表上的任何视图。
可使用下列项生成脚本:
在您的脚本文件中,请确保以下几点:
创建数据库后,可通过执行架构脚本来对其进行测试,如创建逻辑架构中所述。如果遇到错误,请删除所有表,更正错误,然后再次运行脚本。
5 - 准备数据文件
准备两个数据文件集:
如何命名数据文件
可以命名每个数据文件,使其与逻辑架构中的相应表匹配。不用区分大小写。
可以使用扩展名 .tbl
或者希望使用的任何名称。例如,如果表的名称为 Stock_Dimension
,则相应数据文件的名称应为 stock_dimension.tbl
。当使用多个数据文件时,可在文件名称后附加 _nnn
(其中 nnn 是 001 至 999 之间的正整数)。例如,stock_dimension.tbl_001
、stock_dimension.tbl_002
以此类推。
6 - 准备加载脚本
注意
如果您的目标是测试逻辑架构设计的有效性,则可推迟此步骤。
准备 SQL 脚本以使用
vsql 上的 COPY 或通过 ODBC 将数据直接加载到物理存储中。
您需要加载下列项的脚本:
Vertica 建议您使用多个文件来加载大型表。要测试加载过程,请使用大小为 10GB 至 50GB 的文件。该大小具有以下优势:
-
可使用数据文件之一作为
Database Designer 的示例数据文件。
-
可以仅加载足够的数据来执行部分数据加载,然后再加载剩余数据。
-
如果单个加载失败并回退,您不会浪费过多时间。
-
测试加载过程之后,对于多太字节表,请以 250–500GB 的文件大小中断完全加载。
另请参阅
提示
可将示例数据库中包含的加载脚本用作模板。
7 - 创建可选的示例查询脚本
示例查询脚本用于测试架构和加载脚本中是否有错误。
包括您的用户希望针对数据库运行的查询的示例。如果没有执行任何真正的查询,仅编写可收集每个表的计数的简单 SQL。或者,您可以跳过此步骤。
8 - 创建空数据库
有两种方法可以创建空数据库:
尽管可以创建多个数据库(例如,一个用于生产,一个用于测试),安装的每个 Vertica 分析数据库只能有一个活动数据库。
8.1 - 创建数据库名称和密码
数据库名称
数据库名称必须遵循以下规则:
数据库名称区分大小写;但是,Vertica 强烈建议您不要使用仅大小写不同的名称创建数据库。例如,请勿创建名称分别为 mydatabase
和 MyDataBase
的两个数据库。
数据库密码
数据库密码可以包含字母、数字和下表中列出的特殊字符。密码不能包含非 ASCII Unicode 字符。
允许的密码长度介于 0-100 个字符之间。数据库超级用户可以使用 ALTER PROFILE 更改 Vertica 用户的最大密码长度。
您可以使用 配置文件 配置文件指定和控制密码定义。例如,配置文件可以定义密码的最大长度、重用次数、最小数字或所需位数以及其他详细信息。
下表列出了 Vertica 允许在数据库密码中使用的特殊 (ASCII) 字符。特殊字符可以出现在密码字符串的任何位置。例如,mypas$word
或 $mypassword
都是有效的。
当心
如果使用除以下字符之外的任何特殊字符,则有可能会导致数据库不稳定。
另请参阅
8.2 - 使用管理工具创建数据库
-
从
管理主机中运行
管理工具,如下所示:
$ /opt/vertica/bin/admintools
如果您正在使用远程终端应用程序,如 PuTTY 或 Cygwin bash shell,请参阅远程终端用户须知。
-
接受许可协议并指定许可证文件的位置。有关详细信息,请参阅 管理许可证。
仅当您第一次运行管理工具时,才需要执行此步骤
-
在“主菜单 (Main Menu)”上,单击配置菜单 (Configuration Menu),然后单击确定 (OK)。
-
在“配置菜单 (Configuration Menu)”上,单击创建数据库 (Create Database),然后单击确定 (OK)。
-
输入数据库名称和可选注释,然后单击确定 (OK)。有关命名准则和限制,请参阅创建数据库名称和密码。
-
为数据库设立超级用户密码。
当心
如果此时不输入密码,超级用户密码将设置为空。除非数据库用于评估或学术目的,否则 Vertica 强烈建议您输入超级用户密码。有关准则,请参阅
创建数据库名称和密码。
-
从安装 Vertica (
install_vertica -s
) 时指定的主机列表中选择要包括在数据库中的主机,然后单击确定 (OK)。
-
指定用于存储数据和
编录文件的目录,然后单击确定 (OK)。
注意
请勿将一个共享目录用于多个节点。每个节点的数据目录和编录目录必须不同。多个节点不能写入相同的数据目录和编录目录。
-
编录和数据路径名称只能包含字母数字字符,不能有前置空格。如果不能遵守这些限制条件,将导致数据库创建失败。
例如:
编录路径名: /home/dbadmin
数据路径名: /home/dbadmin
-
查看当前数据库定义 (Current Database Definition) 屏幕,确认它表示您要创建的数据库,然后单击是 (Yes) 继续操作,或者单击否 (No) 修改数据库定义。
-
如果单击是 (Yes),Vertica 会创建您定义的数据库,然后显示一条消息,指示已成功创建数据库。
-
单击确定 (OK) 确认消息。
9 - 创建逻辑架构
-
连接到数据库。
在管理工具的“主菜单 (Main Menu)”上,单击连接到数据库 (Connect to Database),再单击确定 (OK)。
有关详细信息,请参阅连接到数据库。
将显示 vsql 欢迎脚本:
Welcome to vsql, the Vertica Analytic Database interactive terminal.
Type: \h or \? for help with vsql commands
\g or terminate with semicolon to execute query
\q to quit
=>
-
运行逻辑架构脚本
在 vsql 中使用 \i meta-command 运行早前准备的 SQL 逻辑架构脚本。
-
与数据库断开连接
在 vsql 中使用 \q
meta-command 返回管理工具。
10 - 执行部分数据加载
Vertica 建议,针对大型表,应首先执行部分数据加载并对数据库进行测试,然后再完成全部数据加载。此加载应加载具有代表性的数据量。
-
加载小型表。
使用 SQL 加载脚本和您之前准备的数据文件来加载小型表数据文件。
-
部分加载大型表。
使用 SQL 加载脚本和您之前准备的数据文件为每个表加载 10GB 到 50GB 的表数据。
有关投影的详细信息,请参阅投影。
11 - 测试数据库
测试数据库以验证其是否正在按照预期效果运行。
检查查询是否存在语法错误并检查执行时间。
-
使用 vsql \timing meta-command 启用查询执行时间的显示(单位为毫秒)。
-
执行您先前准备的 SQL 示例查询脚本。
-
执行多个临时查询。
12 - 优化查询性能
优化数据库由优化压缩和调优查询组成。(请参阅创建数据库设计。)
要优化数据库,请使用 Database Designer 创建和部署一个用于优化数据库的设计。请参阅使用 Database Designer 创建完整的设计。
运行 Database Designer 后,使用查询优化中介绍的技巧来提高某些查询类型的性能。
注意
数据库响应时间取决于多个因素,例如,应用程序查询的类型和规模、数据库设计、存储的数据大小和数据类型、可用的计算能力及网络带宽。如果要将节点添加到数据库群集,不必改善每个查询的系统响应时间,尤其是在响应时间已经很短(例如,小于 10 秒,或响应时间不受硬件约束)时。
13 - 完成数据加载
要完成加载:
-
监控系统资源使用情况。
当加载脚本运行时,继续运行 top
、free
和 df
实用程序并观察(如监控 Linux 资源使用情况中所述)。可以在群集中的任意节点或所有节点上执行此操作。确保系统未过度交换(查看 top
中的 kswapd
)或耗尽交换空间(查看是否有大量可用交换空间已使用)。
注意
Vertica 需要一个专用服务器。如果加载程序或其他进程占用了大量 RAM,则可能会导致交换。
-
完成大型表加载。
运行剩余大型表加载脚本。
14 - 测试优化的数据库
可通过检查查询执行时间来测试优化的设计:
-
使用 vsql \timing
元命令启用查询执行时间(以毫秒为单位)的显示。
执行 SQL 示例查询脚本,以测试架构和加载脚本中是否有错误。
注意
包括您的用户希望针对数据库运行的查询的示例。如果没有执行任何真正的查询,仅编写可收集每个表的计数的简单 SQL。或者,您可以跳过此步骤。
-
执行多个临时查询
-
运行
管理工具并选择连接到数据库 (Connect to Database)。
-
使用 \i meta-command 执行查询脚本;例如:
vmartdb=> \i vmart_query_03.sql customer_name | annual_income
------------------+---------------
James M. McNulty | 999979
Emily G. Vogel | 999998
(2 rows)
Time: First fetch (2 rows): 58.411 ms. All rows formatted: 58.448 ms
vmartdb=> \i vmart_query_06.sql
store_key | order_number | date_ordered
-----------+--------------+--------------
45 | 202416 | 2004-01-04
113 | 66017 | 2004-01-04
121 | 251417 | 2004-01-04
24 | 250295 | 2004-01-04
9 | 188567 | 2004-01-04
166 | 36008 | 2004-01-04
27 | 150241 | 2004-01-04
148 | 182207 | 2004-01-04
198 | 75716 | 2004-01-04
(9 rows)
Time: First fetch (9 rows): 25.342 ms. All rows formatted: 25.383 ms
数据库优化后,应高效地运行查询。如果发现要优化的查询,可以对设计进行逐步修改和更新。
15 - 为国际数据集实施区域设置
区域设置指定用户的语言、所在国家/地区以及任何特殊的可变首选项(例如排序规则)。Vertica 会根据区域设置确定某些字符串函数的行为。此外,区域设置还确定了需要进行排序和比较的各种 SQL 命令(例如聚合 GROUP BY
和 ORDER BY
子句、联接和分析 ORDER BY
子句)的排序规则。
Vertica 数据库的默认区域设置为 en_US@collation=binary
(美国英语)。可以定义供数据库中的所有会话使用的新默认区域设置,也可以覆盖单个会话的区域设置。但是,无论会话排序规则如何,请始终采用默认 en_US@collation=binary
排序规则来对投影进行排序。特定区域设置的排序功能会在查询时应用。
如果您将区域设置设为 NULL,则 Vertica 会将区域设置设为 en_US_POSIX
。您可以通过发出 vsql 元命令 \locale
将区域设置设回默认区域设置和排序规则。例如:
注意
=> set locale to '';
INFO 2567: Canonical locale: 'en_US_POSIX'
Standard collation: 'LEN'
English (United States, Computer)
SET
=> \locale en_US@collation=binary;
INFO 2567: Canonical locale: 'en_US'
Standard collation: 'LEN_KBINARY'
English (United States)
=> \locale
en_US@collation-binary;
可以通过 ODBC、JDBC 和 ADO.net 设置区域设置。
ICU 区域设置支持
Vertica 将 ICU 库用于区域设置支持;您必须使用 ICU 区域设置语法指定区域设置。数据库会话使用的区域设置并非来源于操作系统(通过 LANG
变量),因此 Vertica 建议您为运行 vsql 的每个节点设置 LANG
,如下一个部分所述。
虽然 ICU 库可以指定排序规则、货币和日历首选项,但 Vertica 仅支持排序规则组件。与排序规则无关的任何关键字都将被拒绝。无论会话排序规则如何,始终使用 en_US@collation=binary
排序规则对投影进行排序。特定区域设置的排序功能会在查询时应用。
SET DATESTYLE TO
...
命令提供了日历的一些方面,但 Vertica 仅支持将美元作为货币。
为会话更改 DB 区域设置
此示例将会话区域设置设置为“泰语(Thai)”。
-
在操作系统级别,针对每个运行 vsql 的节点,按照以下方式将 LANG
变量设置为区域设置语言:
export LANG=th_TH.UTF-8
注意
如果按照所示方法设置 LANG=
未起作用,则表示可能未安装区域设置的操作系统支持。
-
针对每个 Vertica 会话(从 ODBC/JDBC 或 vsql 中),设置语言区域设置。
从 vsql 中:
\locale th_TH
-
从 ODBC/JDBC 中:
"SET LOCALE TO th_TH;"
-
在 PUTTY(或 ssh 终端)中,按照以下步骤更改设置:
settings > window > translation > UTF-8
-
单击应用 (Apply),然后单击保存 (Save)。
加载的所有数据必须采用 UTF-8 格式而非 ISO 格式,如分隔数据中所述。与 UTF-8 不兼容的字符集(例如 ISO 8859-1 (Latin1))不受支持,因此 SUBSTRING 等函数对于多字节字符而言无法正常工作。因此,区域设置的设置应无法正常工作。如果转换设置 ISO-8859-11:2001 (Latin/Thai) 正常工作,则表示未正确加载数据。要正确转换数据,请使用一个实用程序,例如 Linux
iconv
。
注意
VARCHAR 和 CHAR 数据类型的最大长度参数是指可以存储在该字段中的八位字节(字节)数,而非字符数。使用多字节 UTF-8 字符时,确保字段的大小可容纳每个字符 1 到 4 个字节,具体取决于数据。
另请参阅
15.1 - 为数据库指定默认区域设置
启动数据库之后,默认区域设置配置参数 DefaultSessionLocale
会设置初始区域设置。您可以覆盖各个会话的这个值。
要为数据库设置区域设置,请按照以下方式使用配置参数:
=> ALTER DATABASE DEFAULT SET DefaultSessionLocale = 'ICU-locale-identifier';
例如:
=> ALTER DATABASE DEFAULT SET DefaultSessionLocale = 'en_GB';
15.2 - 为会话覆盖默认区域设置
您可以通过两种方式覆盖当前会话的默认区域设置:
-
VSQL 命令
\locale
。例如:
=> \locale en_GBINFO:
INFO 2567: Canonical locale: 'en_GB'
Standard collation: 'LEN'
English (United Kingdom)
-
SQL 语句
SET LOCALE
。例如:
=> SET LOCALE TO en_GB;
INFO 2567: Canonical locale: 'en_GB'
Standard collation: 'LEN'
English (United Kingdom)
这两种方法都接受区域设置的短形式和长形式。例如:
=> SET LOCALE TO LEN;
INFO 2567: Canonical locale: 'en'
Standard collation: 'LEN'
English
=> \locale LEN
INFO 2567: Canonical locale: 'en'
Standard collation: 'LEN'
English
另请参阅
15.3 - 服务器区域设置与客户端区域设置
Vertica 将数据库服务器的区域设置与客户端应用程序的区域设置区分开来:
以下部分描述了最佳实践,以确保可预测的结果。
服务器区域设置
服务器会话的区域设置应按照为数据库指定默认区域设置中所述进行设置。如果不同会话的区域设置不同,请的每个会话开始时,从客户端设置服务器的区域设置。
vsql 客户端
-
如果数据库没有默认的会话区域设置,请将会话的服务器区域设置设置为所需的区域设置。
-
运行 vsql 客户端的终端仿真器中的区域设置应该设置为等同于服务器端的会话区域设置(ICU 区域设置)。这样就能在服务器上正确排序数据,并在客户端上正确显示数据。
-
vsql 的所有输入数据应该为 UTF-8,而所有输出数据都以 UTF-8 进行编码。
-
Vertica 不支持非 UTF-8 编码和关联的区域设置值;
-
有关设置区域设置和编码的说明,请参阅终端仿真器文档。
ODBC 客户端
-
ODBC 应用程序可以采用 ANSI 或 Unicode 模式。如果用户应用程序采用 Unicode,ODBC 使用的编码是 UCS-2。如果用户应用程序采用 ANSI,数据必须为单字节 ASCII,这与数据库服务器上使用的 UTF-8 兼容。向 Vertica 服务器传递数据时,ODBC 驱动程序会将 UCS-2 转换为 UTF-8,并会将 Vertica 服务器发来的数据从 UTF-8 转换为 UCS-2。
-
如果用户应用程序尚未采用 UCS-2,应用程序必须将输入数据转换为 UCS-2,否则会发生异常结果。例如:
-
如果数据库没有默认会话区域设置,ODBC 应用程序应该使用 SQLSetConnectAttr
来设置所需的服务器会话区域设置(如果它不同于数据库范围设置)。这样可以在服务器上实现预期的排序规则以及字符串函数行为。
JDBC 和 ADO.NET 客户端
-
JDBC 和 ADO.NET 应用程序使用 UTF-16 字符集编码并负责将任何非 UTF-16 编码数据转换为 UTF-16。如果违反此编码,同样的警告也适用于 ODBC。
-
在传递到 Vertica 服务器并将 Vertica 服务器发送的数据从 UTF-8 转换为 UTF-16 时,JDBC 和 ADO.NET 驱动程序会将 UTF-16 数据转换为 UTF-8。
-
如果在数据库级别没有默认会话区域设置,JDBC 和 ADO.NET 应用程序应该通过执行 SET LOCALE TO 命令设置正确的服务器会话区域设置,以便在服务器上实现预计的排序规则以及字符串函数行为。有关详细信息,请参阅SET LOCALE。
16 - 更改事务隔离级别
默认情况下,Vertica 对所有会话使用 READ COMMITTED
隔离级别。您可以更改数据库或给定会话的默认隔离级别。
事务将保留其隔离级别直至其完成,即使在事务处理期间会话的隔离级别发生更改也是如此。Vertica 内部进程(例如
Tuple Mover 和
刷新操作)以及 DDL 操作始终以 SERIALIZABLE 隔离级别运行以确保一致性。
数据库隔离级别
配置参数
TransactionIsolationLevel
将指定数据库隔离级别,并用作所有会话的默认值。使用
ALTER DATABASE
更改默认隔离级别。例如:
=> ALTER DATABASE DEFAULT SET TransactionIsolationLevel = 'SERIALIZABLE';
ALTER DATABASE
=> ALTER DATABASE DEFAULT SET TransactionIsolationLevel = 'READ COMMITTED';
ALTER DATABASE
数据库隔离级别的更改仅适用于将来的会话。现有会话及其事务会继续使用原始隔离级别。
使用
SHOW CURRENT
查看数据库隔离级别:
=> SHOW CURRENT TransactionIsolationLevel;
level | name | setting
----------+---------------------------+----------------
DATABASE | TransactionIsolationLevel | READ COMMITTED
(1 row)
会话隔离级别
SET SESSION CHARACTERISTICS AS TRANSACTION
更改特定会话的隔离级别。例如:
=> SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET
使用
SHOW
查看当前会话的隔离级别:
=> SHOW TRANSACTION_ISOLATION;
另请参阅
事务