Vertica实施与运维最佳实践
∙ 前言
∙ 数据分布与分区
∙ 负载均衡
∙ 性能诊断与优化
o 查找耗时最长的query
o 分析query的执行计划
o 使用辅助工具进行调优
▪ Databa Designer
最后的风度
▪ Workload Analyzer
▪ 内置的性能评测工具
▪ 附带的diagnostics工具
▪ 附带的profile工具
o 一些优化经验
∙ 与Hadoop互访
o 从hadoop加载数据
o 卸载数据到hadoop
∙ 数据加载
∙ 一些有用的管理操作
前言
在使用vertica的过程中,我们会总结一些很好的经验,为了能帮助大家更好地实施项目,我们整理了其中一些实用的方法与大家分享。
数据分布与分区
数据分布,就是按照某一列或几列,打散数据,把数据均匀的分布在各个节点上,我们把这样的列称为分布键。对于大表,要记得使用。所以 分布键是主键最好,也就是说分布键数据不重复的值越多,越适合做hash.
分布键不要用LONG VARBINARY and LONG VARCHAR 类型的字段。相关语句:SEGMENTED BY HASH(pk_col1,pk_col2) ALL NODES
对于小表,比如维表,可以选择不分布,使用 UNSEGMENTED ALL NODES 让每个节点都有一个副本。这样,大表(事实表)与维表的join操作都可以在各节点本地完成。
vertica要求表的分区数不超过1024,因为一个分区就是一个文件。一般使用年、年月或者月这种时间跨度相对较大的做分区,不建议用日期分区。
# 带分布键和分区的建表ddl
CREATE TABLE fact_test(
urid_ varchar(255) not null,
f2 float,
f7 float,
f12 float,
djzclx int,
xzqh int,
bbq_ int not null
) SEGMENTED BY HASH(urid_,bbq_) ALL NODES
荷叶生时春恨生PARTITION BY bbq_;
国际长途怎么打
历史英雄
# 多副本的建表ddl
吴刚最新电视剧
CREATE TABLE dim_test (
id_ int,
caption_ varchar(255)
) UNSEGMENTED ALL NODES;
负载均衡
在Vertica7以前的版本中,Vertica是通过Linux的Virtual IP来实现连接的负载均衡,但是在Vertica7x以后,Vertica本身提供了连接的负载均衡功能,这个功能用起来也是非常方便。
服务器端设置:
# 启用负载均衡
SELECT SET_LOAD_BALANCE_POLICY('ROUNDROBIN');
# 查看功能是否开启
SELECT GET_LOAD_BALANCE_POLICY();
# 禁用负载均衡
SELECT SET_LOAD_BALANCE_POLICY('NONE');
客户端设置:
# 在url中加入ConnectionLoadBalance参数
"jdbc:vertica://<ip>:5433/<db>?ConnectionLoadBalance=1"
# 或者在java代码中加入参数
props.put("ConnectionLoadBalance", 1);
测试负载均衡功能是否生效
# 每次显示的节点名会变化
lect node_name, client_hostname from ssions;
性能诊断与优化
数据库的调优工作,实际上是一个解决问题的过程,而解决问题,第一步就是需要定位问题。找到问题的手段多种多样,可以通过分析程序、监控生产上服务器的性能、定期生成数据库的负载报告等手段。这里,我们给大家分享其中一些比较好的方法。
查找耗时最长的query
vertica内置的系统视图中,有些用于监控query或ssion的运行状态。例如:QUERY_PROFILES,query_requests等。我们可以通过这些视图统计出query的时长,次数等信息,借此找出耗时最长或者执行最频繁的query。比如QUERY_PROFILES视图:
# 统计最耗时的query top10
SELECT query,count(*) as times,avg(query_duration_us)/1000000 as avg_duration_s,su秦勇儿子
m(query_duration_us)/1000000 as total_duration_s FROM QUERY_PROFILES WHERE query_type = 'QUERY' and query_start>='2015-02-13' group by query ORDER BY avg_duration_s DESC limit 10;
分析query的执行计划
使用profile工具,分析具体的sql语句
# 假设sql语句是:lect * from t
profile lect * from t;
得到这个语句的transcation_id和 statement_id ,然后通过查询系统表 query_plan_profiles获得语句实际的执行计划和各个阶段的执行时间。
# 查询这个sql语句的执行计划
lect cast(t.running_time as varchar),t.* from query_plan_profiles t where transaction_id='45035996273721893' and statement_id =1 order by path_id,path_line_in
言简意赅什么意思dex
上述结果会将sql语句的每个阶段的执行耗时和执行过程呈现出来。通过这个结果,我们可以知道语句中的哪些操作是最影响性能的,然后针对这些问题尝试一些优化。
使用辅助工具进行调优
vertica提供了一些辅助工具,能向用户提供一些优化建议,用户可参考这些建议,实施相关优化调整。这里介绍几个比较好的工具:
Databa Designer
DBD = Databa Designer,是Vertica数据库优化中最主要的原生工具。主要用于帮助用户创建全面设计,为数据库中的表创建投射,分析指定的query,更新统计信息等。
首先运行admintools工具,按下面步骤依次执行:
1. 选择"6 Configuration Menu"
2. 选择"2 Run Databa Designer"
3. "Select a databa for design" 选择需要分析的数据库
4. "Enter directory for Databa Designer output:" 输入dbd的输出目录
5. "Designer name:" 输入dbd的名字,随意起
6. "Design Type[Comprehensive|Query-specific]" 选择dbd的设计类型,有两个单选项,根据实际需求选择
7. "Select schema(s) for design" 选择需要设计的shema(s)
8. "Design options[Optimize with queries|Update statistics|Deploy design]" 这里有三个复选项,推荐先去掉Deploy design,之后可以手工应用dbd的建议
9. "Enter the full path for queries file" 输入业务常用到的sql查询语句,使得dbd的分析更有针对性项目经理述职报告
10. "Propod K-safety value:1" 这里默认即可
11. "Select storage footprint preference[Balanced query/load performance|Query performance(larger footprint)|Load performance(smaller footprint)]" 这里有三个单选项,根据实际需求选择,一般选择第一项,均衡兼顾查询和加载性能
12. "Proceed" 执行dbd
13. "Databa Designer started." dbd完成之后,可根据屏幕提示执行 xxx_deploy.sql 脚本进行部署。
当我们需要针对query进行优化时,可以使用DBD进行物理设计。
Workload Analyzer
WA是一个智能监控query性能的工具。通过分析query执行时的资源使用、负载等,为用户提供优化建议。
#table为query所引用的库表
lect analyze_workload('schema.table');
#优化建议在tuning_command列
当我们需要对库表进行优化时,则可以使用Workload Analyzer
内置的性能评测工具
硬件也是影响性能的一个重要因素,我们需要对服务器硬件的性能有清楚的了解,以确定是是否存在系统瓶颈。vertica内置了一些测试工具用于检测硬件资源的性能。使用如下工具启动相关的测试工具
# 每个节点都执行如下测试
/opt/vertica/bin/vioperf --磁盘性能评估
/opt/vertica/bin/vnetperf --网络性能评估
/opt/vertica/bin/vcpuperf --处理器性能评估
vioperf评测说明:每个节点,平均每个物理核(超线程不算核)至少达到20MB/s的读写速
度,推荐40MB/s,也就是说,对于一个2U*6Core=12核的节点,最低要达到240MB/s的速度
vnetperf评测说明:RTT (round-trip time) latency网络延迟不得超过1000ms,良好的网络延迟应低于20ms。TCP传输率至少100MB/s,理想的速率应该800MB/s以上,UDP传输会略低于TCP。
vcpuper评测说明:测试值越低性能越好,如果low-load-time明显高于low-load-time,则需要关闭CPU throttling(过热降频保护)
附带的diagnostics工具
diagnostics工具用于诊断集群所有节点的硬件性能,与vertica自带的xxxperf工具相比,这个工具诊断的内容更全面。执行前参考工具包中的readme说明,诊断时,选择其中一个节点执行diag脚本即可