- 博客(93)
- 收藏
- 关注
原创 ClickHouse优化典藏
一、 基础优化1.1 数据类型建表时能用数值型或日期时间型表示的字段就不要用字符串,全String类型在以Hive为中心的数仓建设中常见,但ClickHouse环境不应受此影响。虽然ClickHouse底层将DateTime存储为时间戳Long类型,但不建议存储Long类型,因为DateTime不需要经过函数转换处理,执行效率高、可读性好。官方已经指出Nullable类型几乎总是会拖累性能,因为存储Nullable列时需要创建一个额外的文件来存储NULL的标记,并且Nullable列无法被索引。因
2021-04-30 16:55:34 986 2
原创 CllickHouse 部署架构和国内大厂应用实践
ClickHouse自从2016年开源以来,各个大厂纷纷跟进大规模使用。源于ClickHouse 是一款优秀的 OLAP 分析引擎,尤其是在单表分析 、Colocate Join 方面性能表现尤为突出。ClickHouse 之所以在众多的 OLAP 分析引擎中成为佼佼者,主要是因为它具备以下特点:列式存储、LSM-Tree 存储引擎、向量化执行引擎、异步 Merge 和 Mutation 机制、并发 MPP+ SMP 等。集群部署架构ClickHouse 不同于 Elasticsearch、HDFS 这
2021-04-30 15:07:45 726 1
原创 typora 序列号(不使用也可以激活)
license.html 在浏览器中打开,是熟悉的页面无疑了~~ 淦……Ctrl + F 搜索 hasActivated="true"
2024-01-09 16:11:35 18823 19
原创 clickhouse原理解析与应用实践
ClickHouse基础介绍 Click Stream,Data Warehouse 点击流数据仓库 在采集数据过程中,一次页面click,会产生一个event。 ----》 基于页面点击事件流,面向数据仓库进行OLAP分析 Clickhouse 是一个开源的,完全列式存储的,关系型数据库管理系统。面向数据仓库,主要用于联机分析处理(OLAP,Online Analytical Processing)。1.2 优点 关系型联机分析处理 ROLAP,
2022-09-15 11:03:26 1544
原创 PostgreSQL体系结构(下)
本文主要介绍Postgresql体系结构的内存区域和磁盘存储部分,欲知配置文件和服务进程部分,详情请看点击PostgreSQL体系结构(上)。1.3 内存区域PostgreSQL内存区域主要分为共享内存区域与本地内存区域两部分。共享内存为所有的 background process提供内存,由PostgreSQL服务器的所有进程使用;本地内存为每个backend process提供内存,由每个后端进程分配提供自己使用。1.3.1 共享内存区域在数据库系统中,主要关注磁盘IO, 大部分oltp工作
2022-04-25 15:26:04 1353
原创 MySQL 如何响应 KILL 效果
我们使用 MySQL 时经常会遇到需要终止一条查询,大多情况都会用kill或者pt-kill工具终止线程, 本文讨论 kill 命令的效果及其响应。从 MySQL 官网上我们可以看到 kill 命令格式如下:KILL [CONNECTION | QUERY] processlist_id需指定 kill 的级别,默认使用CONNECTION 。CONNECTION, kill 之后 processlist_id 对应的查询终止, 对应的连接退出, 如果没有查询, 那么连接直接退出。QUERY,
2022-04-24 16:00:23 1067
原创 OLAP列式存储之引擎特性
本文简要从存储结构、索引结构和数据更新方式等几个方面介绍当前比较热门的OLAT/HATP列式存储引擎,包括ClickHouse和SqlServer。ClickHouse1.1 存储结构和索引结构ClickHouse拥有多种表引擎类型,在这众多的表引擎中,MergeTree是比较有代表性的引擎之一,被广泛使用。MergeTree采用列式存储,类似LSM Tree的架构组织数据。数据导入时被划分为多个Part,每个Part对应一个目录。Part中包含各个列的数据,每个列都有独立的文件。后台会调度合并任
2022-04-24 15:50:41 1019
原创 PostgreSQL体系结构(上)
本文主要介绍Postgresql体系结构的配置文件和服务进程部分,内存区域和磁盘存储部分,欲知详情请看下节PostgreSQL体系结构(下)。PostgreSQL是一种典型的客户端/服务端、多进程架构模型。主体是由一个守护监听进程Postmaster,若干个客户端应用程序(比如psql,navicat,DBeaver……)和若干个后端PostgreSQL进程(postgres,background writer,wal writer,checkpointer……)所组成。整体上包括以下几个部分:配置
2022-04-24 15:42:33 2328
原创 MySQL (不)同版本多实例
1.实例实例结构组成:Mysqld守护进程 + Master thread + worker thread(IO\SQL\Purge…) + 预分配内存结构2.多实例在一台机器上开启多个不同的MySQL服务端口(3306,3307…),运行多个MySQL服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供各自的服务。同版本多实例共用一套MySQL安装程序,配置文件每个实例对应一个(可以用同一个),启动程序用同一个,数据文件是不同的;不同版本多实例各有一套MySQL安装程序,配置文件
2021-07-09 17:13:56 204
原创 EXPLAIN 之 key_len 计算
通常在优化SQL查询的时候,我们都会使用EXPLAIN分析SQL执行计划,通常来说当用到联合(组合)索引的时候我们如何判断索引完全用上呢?细心的小伙伴肯定发现EXPLAIN/desc执行计划中有一列 key_len ,它表示在本次查询中,所选择的索引长度有多少字节,通常我们可借此判断联合索引有多少列被选择了。换句话说,表示索引覆盖长度,用来判断联合索引应用的长度。如何计算key_len=?列的key_len长度,按照每列的最大预留长度(最大储值长度)来做的计算。单表越少越好,联合表越多越好。影响最大存
2021-07-09 16:59:43 462
原创 ClickHouse集群(1)INSERT、MERGE执行流程
CH集群架构 (metrika.xml)基本由 副本+分片 组成。副本:源数据的冗余,防止数据丢失;分片:数据的水平拆分,提升查询性能。对于ClickHouse而言,集群架构由简单到复杂如下:来自《ClickHouse原理解析与应用实践》一书准备环境集群架构是2分片,1副本create database testdb;use testdb;2.分布式DDL的建表语句2.1 本地表create table test_local ON CLUSTER my_cluster (ID Int8
2021-07-09 16:51:59 2963
原创 ClickHouse 之 FORMAT 应用
ClickHouse是支持将外部数据插入到数据库的,也支持直接查询外部数据文件,同时支持将查询结果直接写入到文件中,这些都需要用到FORMAT参数。虽然这些功能已经非常强大了,但是个人觉得CH对IO数据格式的支持还是离Python等很远很远(不管是广度还是读取识别的准确性)。1.FORMAT的应用1)外部数据插入ClickHouse数据库语法示例如下:clickhouse-client --port 9000 -u default -h 127.0.0.1 --query="INSERT INTO
2021-07-09 16:25:13 3707
翻译 PostgreSQL之base和global目录完全解析
base目录对于集簇里的每个数据库,在$PGDATA/base里都有一个子目录对应,子目录的名字为该数据库在 pg_database里的 OID。#查看各个数据库的oid每一张表的数据(大部分)又是放在 $PGDATA/base/{dboid}/{relfilenode} 这个文件里面,relfilenode一般情况下和和tboid一致,但有些情况下也会变化,如TRUNCATE、REINDEX、CLUSTER以及某些形式的ALTER TABLE。#查询relowner#查询pg_class.
2021-06-07 16:18:27 2389
原创 Distributed表引擎Insert和Select流程
ClickHouse依靠Distributed引擎实现了Distributed(分布式)表机制,在所有分片(本地表)上建立视图进行分布式查询,。它是一种特殊的表引擎,自身不会存储任何数据,而是通过读取或写入其他远端节点上的表进行数据处理的表引擎。该表引擎需要依赖各个节点的本地表来创建,本地表的存在是Distributed表创建的依赖条件,创建语句如下:CREATE TABLE {teble} ON CLUSTER {cluster}AS {local_table}ENGINE= Distributed
2021-06-07 16:11:19 936
原创 ClickHouse数据目录完全解析
之前文章有介绍过基础的MergeTree的物理存储结构,数据会按分区目录的形式保存到磁盘。本文着重介绍一些二进制文件的格式及内容。首先按照如下规则创建表,用于后续数据的对照查询#创建表CREATE TABLE default.ansel( `a` Int32, `b` Int32, `c` Int32, INDEX `idx_c` (c) TYPE minmax GRANULARITY 1)ENGINE = MergeTreePARTITION BY a OR
2021-06-07 16:01:06 3502 1
原创 MySQL 8.0 常见锁介绍(一)
一.概述数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则。对于任何一种数据库来说都需要有相应的锁定机制,所以MySQL自然也不能例外。MySQL数据库由于其自身架构的特点,存在多种数据存储引擎,每种存储引擎所针对的应用场景特点都不太一样,为了满足各自特定应用场景的需求,每种存储引擎的锁定机制都是为各自所面对的特定场景而优化设计,所以各存储引擎的锁定机制也有较大区别。MySQL各存储引擎使用了三种类型(级别)的锁定机制:表级锁定,行级锁定和页级锁定
2021-06-07 15:50:41 677 1
原创 ClickHouse那些年我们遇到过的问题
在使用ClickHouse当中,相信大家都遇到过各种各样的报错信息,难道从入门到放弃? 下面我将常见的报错总结,供大家参考排查问题。1.1 问题再现Memory limit (for query) exceeded:would use 9.37 GiB (attempt to allocate chunk of 301989888 bytes), maximum: 9.31 GiB1.2 分析问题默认情况下,ClickHouse会限制了SQL的查询内存使用的上线,当内存使用量大于该值的时候,查询被
2021-06-07 15:37:52 6490
原创 为什么MySQL会选错索引?
MySQL 中,可以为某张表指定多个索引,但在语句具体执行时,选用哪个索引是由 MySQL 中执行器确定的。那么执行器选择索引的原则是什么,以及会不会出现选错索引的情况呢?示例:创建表 Y,设置两个普通索引, 创建一个存储过程用于插入数据。-- MySQL版本:mysql> select version();+------------+| version() |+------------+| 5.7.28-log |+------------+1 row in set (0.00
2021-04-30 15:59:59 160 1
原创 从MySQL基础架构中-解读查询和更新流程
1. 一条SQL查询语句是如何执行的?以mysql.user 表为例,表里有一个 User 字段,执行下面这条查询:select * from mysql.user where User='ansel.zhang' limit 1\G*************************** 1. row *************************** Host: localhost User: ansel.zhang
2021-04-30 15:28:45 164 2
原创 PostgreSQL “表膨胀“ 的救世主
近期,生产环境出现不同库下的同一表名(小表-几十条数据)的占用size已达近G,频繁修改,删除记录,但是空间一直未释放,是何原因?原因就在于vacuum,而vacuum怎么存储,清理数据的可参考官方文档进行查看。PG vacuum官方文档https://www.postgresql.org/docs/current/routine-vacuuming.html操作数据时,PostgreSQL会为每一个客户端提供单独的快照。客户端对快照中的数据进行更新和删除,一些数据最终变成过期数据,但它们仍存在
2021-04-30 15:17:01 1441 1
原创 MergeTree的Merge和Mutation机制
1.MergeTree Mutation功能介绍在上一篇系列文章中,我已经介绍过ClickHouse内核中的MergeTree存储一旦生成一个Data Part,这个Data Part就不可再更改了。所以从MergeTree存储内核层面,ClickHouse就不擅长做数据更新删除操作。但是绝大部分用户场景中,难免会出现需要手动订正、修复数据的场景。所以ClickHouse为用户设计了一套离线异步机制来支持低频的Mutation(改、删)操作。2.Mutation命令执行ALTER TABLE [db.
2021-04-30 14:58:18 483 1
转载 MergeTree的存储结构和查询加速
1 MergeTree存储1.1 MergeTree思想提到MergeTree这个词,可能大家都会联想到LSM-Tree这个数据结构,我们常用它来解决随机写磁盘的性能问题,MergeTree的核心思想和LSM-Tree相同。MergeTree存储结构需要对用户写入的数据做排序然后进行有序存储,数据有序存储带来两大核心优势:列存文件在按块做压缩时,排序键中的列值是连续或者重复的,使得列存块的数据压缩可以获得极致的压缩比。存储有序性本身就是一种可以加速查询的索引结构,根据排序键中列的等值条件或者rang
2021-04-19 10:47:17 343
原创 ClickHouse (MATERIALIZED) VIEW
数据库中的视图(View) 指的是通过一张或多张表查询出来的逻辑表 ,本身只是一段 SQL 的封装并不存储数据。对于ClickHouse来说,视图分为普通视图和物化视图两类。其中普通视图只是一种简单查询映射,类似于linux的软连接;而物化视图数据独立存储,类似于linux的硬链接。普通视图:不存储数据,仅存储指定的 SELECT 查询(基表的查询映射)物化视图:数据独立存储(持久化),有表结构,有引擎准备环境:假设有一个表test来记录用户下载的信息,并且可以追踪用户每天下的信息:click
2021-04-15 14:46:05 2019
原创 MySQL pt工具包集合(一)
1.pt工具介绍Percona Toolkit简称pt工具,是Percona公司开发用于管理MySQL的工具,包括表中记录归档和清理、在线DDL、检查主从复制的数据一致性、检查重复索引、定位IO占用高的表文件等功能,利用工具提高日常工作效率。2. pt工具安装下载地址:https://www.percona.com/downloads/percona-toolkit/LATEST/linux下载:wget https://www.percona.com/downloads/percona-t
2021-04-15 14:39:25 1287
原创 ClickHouse 你不知道的盲区
1.TransactionClickHouse不支持事务,也就不存在隔离级别。这里要额外说一下,有人觉得,一个数据库都不支持事务,不支持ACID还玩个毛。ClickHouse的定位是分析性数据库(OLAP系列),而不是严格的关系型数据库。又有人要问了,数据都不一致,统计个毛。举个例子,汽车的油表是100%准确么?为了获得一个100%准确的值,难道每次测量你都要停车检查么?统计数据的意义在于用大量的数据看规律,看趋势,而不是100%准确。2.IO在IO方面,以MySQL为例,MySQL为行存储,Clic
2021-04-15 14:29:48 1366
原创 PG、MySQL、CH最大连接数问题集合
在日常工作中,对于数据库难免处理一些最大连接数相关的问题,原因都是大同小异,一般都是业务做统计完成之后不关掉,访问量过高,或者timeout时间设置不合理等问题导致监控报警。对于最大连接数的调整,如果服务器的并发请求量比较大,可以调高这个值,当然这是要建立在机器能够支撑的情况下,因为如果连接数越来越多,数据库实例为每个连接提供缓冲区,就会开销越多的内存,所以需要适当的调整该值,较合理的最大连接数一般 used_connections/max_connections在85%~90%左右正好。Postg
2021-04-15 11:20:33 1058
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人