随笔分类 - 性能相关
摘要:用户数据行存储在文件系统中的堆文件中,而这些行以不确定的顺序存储。如果表最初以插入/复制的顺序加载,那么以后的插入、更新和删除将导致在堆文件中以不可预测的顺序添加行。创建索引创建一个指向堆行的辅助文件,并将索引条目与创建索引命令中指定的列中的值进行排序。通过在索引中快速查找所需的值,可以快速找到匹配
阅读全文
摘要:对于内存泄漏问题,如何分析并找到内存泄漏的原因是个难点。KingbaseES 提供了memstat 扩展插件用于分析内存泄漏的原因。 一、使用 memstat 插件 1、修改shared_preload_libraries , 增加 memstat 。需要重启数据库。 2、创建扩展插件 create
阅读全文
摘要:窗口函数常用用于分组排序运算中,方便用户实现各种分组需求。由于窗口函数需要通常需要全表扫描数据,同时还需排序聚集,消耗大量的CPU资源,执行效率较低。以下介绍一例窗口函数的优化案例。 准备例子 有这样一个功能需求。系统中存在资讯信息这样一个模块,用于发布一些和业务相关的活动动态,其中每条资讯信息都有
阅读全文
摘要:前言:存储过程可能涉及很多的SQL及控制块,我们看到的执行时间是整个过程块的执行时间,如果我们认为性能有问题,我们只能逐条SQL的分析,查找问题SQL,效率非常低下。KingbaseES 提供了 plsql_plprofiler 扩展插件, 可以方便用户跟踪分析过程的每条语句的执行情况,能让我们快速
阅读全文
摘要:概述:了解KingbaseES查询计划对于开发人员和数据库管理员来说都是一项关键技能。这可能是优化SQL查询的第一件事,也是验证优化的SQL查询是否确实实现期望结果的方式。 1、KingbaseES数据库中的查询生命周期 每个查询都会经历不同的阶段,了解下面周期的每个阶段,对理解数据库是很重要的。
阅读全文
摘要:GIN(Generalized Inverted Index, 通用倒排索引) 是一个存储对(key, posting list)集合的索引结构,其中key是一个键值,而posting list 是一组出现过key的位置。如(‘hello', '14:2 23:4')中,表示hello在14:2和2
阅读全文
摘要:KingbaseES 有两个参数 enable_partitionwise_join , enable_partitionwise_aggregate 用于分区智能连接和聚集,默认这两个参数是 off 的。开启这两个参数,对于采用hash join 或 hash aggregate 的执行方式有性能
阅读全文
摘要:KingbaseES enable_hint_table 可以看成类似 oracle outline 工具,可以在不修改SQL 的情况下,通过hint 改变SQL 的执行计划。 一、启用enable_hint_table 1、设置shared_preload_libraries 参数,增加 sys_
阅读全文
摘要:Oracle 在查询数据 可以通过cache hint 所访问的数据cache 到数据库buffer,对于KingbaseES,如何将数据加载到cache 了?sys_prewarm 扩展插件可以实现数据的cache 一、准备数据 test=# create table prewarm_test1(
阅读全文
摘要:背景:随着硬件技术的提升,磁盘的IO能力及CPU的运算能力都得到了极大的增强,如何充分利用硬件资源为运算加速,是数据库设计过程中必须考虑的问题。数据库是IO和CPU密集型的软件,大规模的数据访问需要大量的IO,大数据量的连接操作需要大量的CPU运算。并行查询可以通过在数据的读和计算上,通过把Join
阅读全文
摘要:关键字:SQL,CTE,递归查询 概述:通常递归查询是一个有难度的话题,尽管如此,它们仍使您能够完成在 SQL 中无法实现的操作。本文通过示例进行了简单介绍,并展示了与 PL/SQL的递归查询实现的差异。 一、公用表表达式(WITH子句) 公用表表达式(CTE)可以被看作是一个视图,只适用于一个单一
阅读全文
摘要:通过explain ,我们可以获取特定SQL 的执行计划。但对于同一条SQL,不同的变量、不同的系统负荷,其执行计划可能不同。我们要如何取得SQL执行时间点的执行计划?KingbaseES 提供了 auto_explain 扩展插件,可以自动跟踪SQL执行计划。 1、设置参数 设置参数: share
阅读全文
摘要:一、数据库应用类型 针对不同的应用模型,需要对数据库配置进行优化: 1、网络应用程序(WEB) 通常受 CPU 限制 DB比RAM小得多 90% 或更多的简单查询 2、在线事务处理 (OLTP) 通常受 CPU 或 I/O 限制 数据库数据量远大于系统内存 20-40% 小数据写入查询 长事务
阅读全文
摘要:在实际SQL优化工作中,我们经常会发现SQL 执行计划明明是 “Index Only Scan”,但执行计划后面却有 “Heap Fetches: x” ,也就是说实际执行计划还是访问了表记录。这是为什么了? 一、举个例子 1、创建数据 create table t1(id1 integer,id2
阅读全文
摘要:对于Oracle ,一条tuple 的 rowid正常是不会变化的(引发row movement的操作除外,如:跨分区迁移update,表收缩),因此,应用设计上可以方便的使用rowid,加快访问速度。对于KingbaseES,同样也有ctid,格式 “(blockid,slotid)”,通过cti
阅读全文
摘要:对于递归查询,KingbaseES 用户可以选择使用connect by ,或者使用 with recursive 。下面,我们举例来看下二者的差别。 一、构造数据 create table test_recursive(id integer,pid integer,name varchar,des
阅读全文
摘要:有过SQL优化经历的人都知道,对于有些SQL性能问题,可能需要涉及到SQL层面的修改,这不仅麻烦,而且在已上线的系统还存在很大的风险。KingbaseES V8R6 提供了query mapping功能,用户可以通过SQL映射,可以避免直接修改SQL的过程。 以下以举例介绍query mapping
阅读全文
摘要:一、函数的属性 KingbaseES 函数在定义时有三种稳定性级别:volatile、stable 和 immutable。默认情况下,创建函数的稳定性为volatile。以下是这三种函数的区别: Volatile 函数可以做任何事情,包括修改数据库。在调用中,输入同样的参数可能会返回不同的结果,比
阅读全文
摘要:前言:KingbaseES V8R6C4 之前版本hint 使用方法是与Postgresql 相同的,通过 pg_hint_plan扩展,支持在SQL中使用hint。由于该版本的hint只能放置于SQL开始处,无法对子查询单独使用hint,实际使用非常不方便。由于无法对子查询单独使用hint,对于父
阅读全文
摘要:熟悉oracle 的人都知道,对于两表的关联更新,其执行计划主要有 Filter 和 Outer Join 两种方式。对于大批量数据的update,Join方式明显是更优的选择。KingbaseES 和 Postgresql 也支持两种方式的关联update,语法上采用两种不同的写法。 以下以例子的
阅读全文