1、 参数调整web
一、块I/O参数算法
1)参数描述sql
此参数用来设置块设备参数。cookie
2)现参数:网络
现没有设置块I/O参数。session
3)加入参数:app
#vi /etc/rc.d/rc.localtcp
blockdev --setra 16384 /dev/sdbpost
注:master、standby节点不需修改。性能
二、I/O调度算法
因为数据仓库属于IO敏感性应用,为了提升系统效率,生产环境中,咱们应该在LINUX内核上修改IO调度的算法。以root身份编辑/boot/grub/menu.lst,添加一行
elevator=deadline,可是不要修改failsafe的定义,重启系统(必须),再以root身份执行命令cat /sys/block/*/queue/scheduler,输出的每行应该含有有[deadline]。
三、网络参数
rmem_default — 默认的接收窗口大小。
rmem_max — 接收窗口的最大大小。
wmem_default — 默认的发送窗口大小。
wmem_max — 发送窗口的最大大小
使用 /etc/sysctl.conf 在系统启动时把参数配置成您所设置的值:
net.core.rmem_default = 256960
net.core.rmem_max = 256960
net.core.wmem_default = 256960
net.core.wmem_max = 256960
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_sack = 0
net.ipv4.tcp_window_scaling = 1
而后从新启动网络守护程序/etc/rc.d/init.d/network restart。
四、系统参数(已完成)
一、参数描绘
cat /etc/security/limits.conf
二、现参数:
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
五、GP相关参数
#vi /etc/sysctl.conf
kernel.sem = 250 64000 100 512
kernel.shmmax = 500000000
kernel.shmmni = 4096
kernel.shmall = 4000000000
kernel.sem = 250 64000 100 512
kernel.sysrq = 1
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
net.ipv4.tcp_syncookies = 1
net.ipv4.ip_forward = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_max_syn_backlog=4096
net.ipv4.conf.all.arp_filter = 1
net.core.netdev_max_backlog=10000
net.ipv4.ip_local_port_range = 1025 65535
一、 kernel.shmmax = 7516192768 (8G,取物理内存16G的50%)
二、 kernel.shmall = 4000000000(物理内存16G时相应大小)
三、 kernel.sem = 250 64000 100 1024
六、GP参数
注:segment host上是4个primary instance,4个mirror instance.
cat /gpmaster/gp-1/postgresql.conf
一、 shared_buffers(local, max_connections*16K)
shared_buffers = 1600MB # master、standby
shared_buffers = 200MB # segment
二、 work_mem(,global,物理内存的2%-4%)
work_mem = 640MB # master、standby
三、 effective_cache_size(master节点,设为物理内存的85%,15032385536)
effective_cache_size = 9600MB
四、 mainteance_work_mem(global,CREATE INDEX, VACUUM等时用到)
maintenance_work_mem = 800MB
五、 max_connections(local,最大链接数)
max_connections = 200 #(master、standby)
max_connections = 1200 #(segment)
六、 max_prepared_transactions(local,与master最大链接数相同)
max_prepraed_transacrions=300 #(master与segment instance相同)
2、 表整理(以kn_weblog_detail为例)
一、 表统计
select relname from pg_class t where t.relname like 'ods%';
select relname from pg_class t where t.relname like 'kn%';
二、 VACUUM
VACUUM [ FULL | FREEZE ] [ VERBOSE ] [ table ]
VACUUM [ FULL | FREEZE ] [ VERBOSE ] ANALYZE [ table [ (column [, ...] ) ] ]
三、 Analyze
ANALYZE [ table [ (column [, ...] ) ] ]
3、 按列存储优化(以kn_weblog_detail为例)
一、 建表:
create table temp_huagai_weblog_Detail_test
(
id varchar(128) NULL,
session_id varchar(120) NULL,
ticket_id varchar(120) NULL,
global_user_id int8 NULL,
visit_date timestamp NULL,
visit_day int8 NULL,
email varchar(128) NULL,
ord int8 NULL,
hh24 int8 NULL,
ip varchar(17) NULL,
area_prov varchar(32) NULL,
area_city varchar(32) NULL,
if_in_page varchar(2) NULL,
if_out_page varchar(2) NULL,
if_main_act_page varchar(2) NULL,
if_last_main_act_page varchar(2) NULL,
if_above_page varchar(2) NULL,
page_on_time int8 NULL,
goods_id varchar(50) NULL,
utm_source varchar(128) NULL,
utm_source_type int4 NULL,
utm_medium varchar(128) NULL,
utm_campaign varchar(128) NULL,
loc_url varchar(4096) NULL,
ref_url varchar(4096) NULL,
user_agent varchar(4096) NULL,
browser_name varchar(64) NULL,
os varchar(64) NULL,
resolution varchar(64) NULL,
client_type varchar(64) NULL,
ck_cps_uid varchar(12) NULL,
ck_cps_cid varchar(12) NULL,
url_cps_uid varchar(12) NULL,
url_cps_cid varchar(12) NULL,
goods_history varchar(1024) NULL,
order_id int8 NULL,
ref_id varchar(128) NULL,
time_stamp timestamp NULL,
log_ip int8 NULL
)WITH (appendonly=true, orientation=column,compresstype=QuickLZ,compresslevel=1)
DISTRIBUTED BY (id);
二、 建立位图索引
CREATE INDEX goods_id _bmp_idx ON temp_huagai_weblog_Detail USING bitmap (goods_id);
4、 性能评估
一、 I/O测试sql
select count(1) from kn_webloG_all_detail where visit_date >= '2011-11-01' and visit_date < '2011-11-02';
二、 CPU测试sql
SELECT a.ID
,a.SESSION_ID
,a.ticket_id
,a.global_user_id
, a.email
,a.ORD
,a.VISIT_DATE
,a.visit_day
,a.HH24
,A.IP
,coalesce(B.Province,'-') as area_prov
,coalesce(B.city,'-') as area_city
, if_in_page
FROM temp_huagai_weblog_Detail A
left join
(
select a.id,B.PROVINCE,B.CITY from temp_huagai_weblog_Detail a
INNER JOIN ODS_IP B ON A.LOG_IP >= B.HOST_FROM WHERE A.LOG_IP <= B.HOST_TO
) B on A.ID = B.ID;
三、评估方法
gpcheckperf -f all_file -d /dbfast1 -d dw
采用gpcheckperf,统计性能数据,完成评估报告。
5、 问题
一、 Sql
二、 insert into OL_MONITORING_HOUR_FACT
select t1.visit_day
,t1.hh24
,t1.pv
,t1.visits
,t1.uv
,t1.uip
,t1.bounces
,t1.exit_visit
,coalesce(t2.order_num,0) visit_order
,coalesce(t2.order_amt,0) visit_order_amt
,coalesce(t2.order_num,0)*1.0/t1.visits exchange_rate
,t1.bounces*1.0/t1.visits bounce_rate
,t1.exit_visit*1.0/t1.pv exit_rate
,now()
from
(
select visit_day,hh24
,count(1) pv
,count(distinct session_id) visits
,count(distinct ticket_id)uv
,count(distinct ip) uip
,sum(case when if_out_page= 1 and if_in_page = 1 then 1 else 0 end) bounces
,sum(case when if_out_page = 1 then 1 else 0 end) exit_visit
from kn_weblog_Detail_hour
where visit_date >= '2011-11-11' and visit_date < '2011-11-12'
group by visit_day,hh24
order by 1,2
)t1
left join
(
SELECT
TO_CHAR(to_timestamp(add_time),'YYYYMMDD') visit_day
,EXTRACT(HOUR FROM to_timestamp(add_time)) hh24
,count(distinct id) order_num
,sum(ORDER_PRICE) order_amt
FROM ods_shop101_tbl_goods_order
WHERE to_timestamp(add_time) >= '2011-11-11' AND to_timestamp(add_time) < '2011-11-12'
GROUP BY TO_CHAR(to_timestamp(add_time),'YYYYMMDD') ,EXTRACT(HOUR FROM to_timestamp(add_time))
ORDER BY 1,2
)t2 on t1.visit_day = t2.visit_day and t1.hh24 = t2.hh24
order by 1,2
6、 测试结果
序号 |
参数 |
取值 |
调整范围 |
结论 |
1 |
kernel.shmmax |
物理内存50% |
master |
对GP无明显影响 |
2 |
|
小于物理内存25% |
segment |
过大,GP没法启动 |
3 |
kernel.shmall |
物理内存 |
Master/segment |
对GP无明显影响 |
4 |
kernel.sem |
1024 |
Master/segment |
对GP无明显影响 |
5 |
块参数 |
16384 |
Master/segment |
对GP无明显影响 |
6 |
IO调度算法 |
|
Master/segment |
对GP无明显影响 |
7 |
网络参数 |
|
Master/segment |
对GP无明显影响 |
8 |
max_connections |
200 |
master |
GP启动正常 |
9 |
|
1200 |
segment |
GP启动正常 |
10 |
max_prepared_transactions |
300 |
Master/segment |
GP启动正常 |
11 |
shared_buffers |
400MB |
master |
GP启动正常 |
12 |
work_mem |
160MB |
global |
GP启动正常 |
13 |
effective_cache_size |
500MB |
master |
对GP无明显影响 |
7、 结论
结合前面生产环境上参数优化分析,总结以下:
一、 在生产环境上max_connections和max_prepared_transactions修改致使GP没法启动的现象没有出现;
二、 测试环境上kernel.shmmax(master物理内存50%,segment物理内存25%),没有使用交换分区。以前,生产环境上,kernel.shmmax(master和 segment)均取物理内存85%,致使内存交换;
在生产环境上shared_buffers修改致使GP没法启动的现象没有出现。
8、 优化建议
能够进一步在生产环境上逐项优化。
优化方法及步骤以下:
一、 kernel.shmmax:master/standby取物理内存50%;segment取物理内存25%;
二、 max_connections(master/standby为200segment1200)
max_prepared_transactions(master/standby/segment均为300)
三、 shared_buffers:
master/standby取物理内存10%;segment取物理内存10%/实例数;
四、 块参数:16384;
五、 IO调度算法;
六、 网络参数;
七、 work_mem