Vertica 基本架构介绍 常用参数 常用SQL语句(非常有用~~)(一)

1.Vertica架构

Vertica是一款基于列存储的MPP(大规模并行处理)架构的数据库,它可以支持存放PB级别的结构化数据。
(1)MPP架构
  该结构由多个完全独立的处理节点构成,每个处理节点具有自己独立的处理器、独立的内存(主存储器)和独立的磁盘存储,多个处理节点在处理器由高速通信网络连接,系统中的各个处理器使用自己的内存独立地处理自己的数据。
  在这种结构中,每一个处理节点就是一个小型的数据库系统,多个节点一起构成整个的分布式的并行数据库系统。由于每个处理器使用自己的资源处理自己的数据,不存在内存和磁盘的争用,从而提高了整体性能。另外这种结构具有优良的可扩展性,只需增加额外的处理节点,就可以接近线性的比例增加系统的处理能力。
Vertica无共享MPP的特点
  • 无特殊节点
  • 所有节点对等
  • 可通过任意节点查询或加载数据
  • 实时加载与查询同步进行
 
(2)列存储的优点
 

2.常用参数

(1)设置主键唯一
alter database viid set EnableNewPrimaryKeysByDefault=1;
alter database viid set EnableNewUniqueKeysByDefault=1;
(2)设置和查看连接数
SELECT SET_CONFIG_PARAMETER('MaxClientSessions', 1000);
SELECT GET_CONFIG_PARAMETER('MaxClientSessions');
-- 查看连接数
select count(*) from v_monitor.sessions;
(3)查看设置k-safe
SELECT current_fault_tolerance FROM system;
-- 1为集群,0为单机
SELECT MARK_DESIGN_KSAFE(0);
(4)合并ros
-- ros合并设置30秒,默认为600秒
SELECT SET_CONFIG_PARAMETER('MergeOutInterval', 30);
SELECT GET_CONFIG_PARAMETER('MergeOutInterval');

-- 手动合并ROS,耗时比较久
select DO_TM_TASK ('mergeout');
 

3.辅助语句

(1)vsql工具
vsql工具其实和psql是一样的,可以不需要外部工具(如DBeaver)来访问vertica内部
# 切换dbadmin用户
su - dbadmin
# 选择数据库test,密码为dbadmin
vsql test -w dbadmin
 
 
(2)查看每个表的存储大小, 以下例子schema为test1
SELECT /*+(compressed_table_size)*/
       anchor_table_schema,
       anchor_table_name,
       SUM(used_bytes) / ( 1024^3 ) AS used_compressed_gb
FROM   v_monitor.projection_storage
Where anchor_table_schema = 'test1'
GROUP  BY anchor_table_schema,
          anchor_table_name
ORDER  BY SUM(used_bytes) DESC;
(3)查看表信息
--所有表
select table_schema, owner_name, table_name,partition_expression from tables;

--未分区的表
select table_schema, owner_name, table_name,partition_expression from tables 
where partition_expression='';

--分区的表
select table_schema, owner_name, table_name,partition_expression from tables 
where partition_expression <> '';
(4)根据Long时间戳类型创建分区
字段名:pass_time
需要添加在建表语句末尾
PARTITION BY ((pass_time+28800000)//86400000)
GROUP BY (
CASE
WHEN ((extract (epoch from (now()))+28800) - (pass_time+28800000)//86400000 >= 60)
THEN (((pass_time+28800000)//86400000)//30)
WHEN ((extract (epoch from (now()))+28800) - (pass_time+28800000)//86400000 <0)
THEN (((pass_time+28800000)//86400000)//365)
ELSE ((pass_time+28800000)//86400000) END);
(5)收集表信息
select analyze_statistics('test1.table1');
(6)查询慢sql和kill慢sql
--返回查询sql,sql查询时间,根据执行时间做倒序排序
--秒:second 毫秒:Millisecond
select request, DATEDIFF('second',start_timestamp,end_timestamp)as execute_time  
from v_monitor.query_requests where is_executing ='f' order by execute_time desc limit 50;

--查找慢sql的session_id和statement_id,以下例子表名为test1.table1
select session_id,statement_id,request from v_monitor.query_requests
where is_executing ='true' and request like '%test1.table1%';

--根据查找到的session_id和statement_id来kill慢sql
SELECT INTERRUPT_STATEMENT('v_viid_node0001-95:0x285a9', '1');
 
(7)清理删除和更新的数据
vertica这点和GP PG相似,就是当有Delete和Update语句时,数据并不会直接删除,而是用户不可见,这些数据会定时清理或者用户手动清理。
--清除所有数据
SELECT MAKE_AHM_NOW();

--清除所有Projection上的已删除记录
SELECT PURGE();

--清除一个表格中所有Projection的已删除记录
SELECT PURGE_TABLE('表名');
select PURGE_TABLE('cms.offset_storage');

--清除一个Projection中的已删除记录
SELECT PURGE_PROJECTION('Projection名称');

--已经删除的表或者表中的行会放在storage_containers表中
select * from storage_containers where deleted_row_count >0 and projection_name='offset_storage_super';

--数据清理完查看这个
SELECT projection_name, deleted_row_count FROM delete_vectors where projection_name = 'offset_storage_super';
 

猜你喜欢

转载自blog.csdn.net/qq_35260875/article/details/107092474