lightdb基础题

lightdb基础题

1、 在LightDB/PostgreSQL中,有表a,定义为:create table a(id int primary key, rand int, comm varchar(128))。如何一条语句生成一张1000万记录的表,且满足id从1001万-2000万,rand为0-1000000之间的随机整数,comm为随机生成的UUID
create table a(id int primary key, rand int, comm varchar(128));
insert into a select *, random() * 1000000, gen_random_uuid() from generate_series(10010000, 20000000);

2、 有两张表a和b,没有索引,数据量分别为1万行和1000万行,要执行下列SQL语句:
select count(1) from a,b where a.id=b.id
两个表应该选择哪种执行计划?
A. hash join B. nest loop join C. merge join
为什么?

选 A.
Hash join 不需要索引的支持。大多数情况下,hash join 比之前的 Block Nested-Loop 算法在没有索引时的等值连接更加高效。
nest loop join在没有索引的情况下,会进行n次的全表扫描
Merge join可能都需要执行一个Sort操作

3、 hash join和哪几个GUC 相关?
work_mem
Max_connections
hash_mem_multipler

4、 什么情况下hash join无法生效?
不是等值查询
5、 并行执行(parallel)是什么意思?
当 sql 涉及大量数据的查询是,pg 会执行类似 map-reduce 的操作将一个大任务分成多个小任务,每个小任务可以独立同时执行。
6、 一个加了/+ Parallel(a 4 hard)/优化器提示的SQL未走并行执行计划,通常有哪些原因?
系统资源不足
超过并行度限制参数 max_worker_processes
7、 如何判断一个函数是否为parallel safe?
select proname, proparallel from pg_proc where proparallel != ‘u’;
8、 在LightDB里,哪几种分页查询语法正确的?
通用法

select * from a limit 10 offset 100;
pg 特有
SELECT *
FROM a
OFFSET 11 * 10
FETCH NEXT 10 ROWS ONLY;
9、 修改分布式LightDB参数的正确步骤
分别修改单实例上的配置文件 lightdb.conf 或 postgresql.conf
根据参数级别确认是重启数据库还是 reload
10、 修改高可用LightDB参数的正确步骤
lightdb.conf 的修改还是遵循单实例 lightdb 修改的规则。
配置文件 ltcluster.conf 内容改变时需要根据节点角色对应执行:
ltcluster primary register --force -f /path/to/ltcluster.conf
ltcluster standby register --force -f /path/to/ltcluster.conf
ltcluster witness register --force -f /path/to/ltcluster.conf -h primary_host
11、 如何查看LightDB集群的状态
select * from pg_dist_node;
select * from canopy_tables;
select table_name,shardid,shard_name,nodename,nodeport from canopy_shards;
ltcluster -f LTHOME/etc/ltcluster/ltcluster.conf service status
12、 LightDB日常采用哪些性能测试工具?
13、 LightDB支持哪些操作系统版本和CPU架构
Architecture OS
x86_64(intel) CentOS7/RHEL7 /rockylinux8/麒麟V10SP1
x86_64(海光) 麒麟V10/麒麟V10SP1
aarch64 CentOS7/RHEL7 /rockylinux8/麒麟V10SP1/麒麟V10SP2
14、 如何查看一个SQL语句的执行计划
Explain 加在sql语句前面
15、 如何查看一个SQL语句的实际执行计划
explain analyze 加在sql语句前面
16、 哪个命令可以查询包含enable的所有GUC参数
SELECT name, current_setting(name) AS value
FROM pg_settings
WHERE name ILIKE ‘%enable%’;
17、 如何查看一张表的大小
select pg_size_pretty(pg_relation_size(‘a’));
18、 如何查看一张分布式表的大小
 select pg_total_relation_size(‘a’);
19、 如何查看一张表是否已经缓存在共享缓冲(shared_buffers)中
select relname, relpages from pg_class where relpages > 0;
20、 如何删除表的主键
alter table b drop constraint b_pkey;
21、 如何通过SQL查询到当前lightdb实例的版本
select version();
22、 如何查询当前lightdb实例的角色(primary/standby)
select pg_is_in_recovery();
23、 Lightdb支持哪些方式导入CSV或文本数据?
copy b from ‘/home/lightdb/data4/abc.csv’ csv;
24、 Lightdb支持哪些方式导出CSV或文本数据?
copy b to ‘/home/lightdb/data4/abc.csv’ with csv;
25、 LightDB分布式表支持哪些类型?一般什么情况下建议使用哪种表?
reference table, 存储于cn结点。
   distributed table,存储于dn结点。
26、 如何查看当前数据库的实时活动、正在执行哪些SQL,当前语句执行了多久?
SELECT pid, query, now() - pg_stat_activity.query_start AS duration
FROM pg_stat_activity
WHERE state = ‘active’
ORDER BY duration DESC;
27、 如何查看主从节点的滞后延时以及滞后WAL大小(转换为字节数)?
select * from pg_stat_replication;
28、 internal函数是什么函数?internal如何创建?它和动态加载函数在开发上有什么差别?38.9 38.10.3
internal函数和动态加载的函数均可用c语言进行开发,internal需要配置pg_proc.dat文件手动指定相关参数及oid。
29、 PL过程是LightDB内置的吗?它是如何实现的?38.8
PL过程通过extenstion进行加载。
30、 自定义PL/pgSQL、PL/oraSQL、SQL函数、过程的内部执行过程
均按语句块一行一行解析,解析出来语句后走gram语法分析,然后进入正常的执行流程。
31、 LightDB执行c语言编写的函数时,会从哪些路径查找对应的so。38.10
环境变量:LD_LIBRARY_PATH
32、 新修改的c语言函数的so何时会生效?新启动一个会话的时候,每次会话启动访问都会加载,不是实例级别缓存。38.10
重新启动会话
33、 某些函数在BODY最后声明了STRICT,其作用是什么?
检查函数参数是否NULL并结束执行
34、 Datum代表什么?
代表任意数据类型,在 C 语言层面上是一个指针。
35、 Oid代表什么?
PG 用来唯一标识数据库对象,如:表名,行,索引等。
36、 LightDB支持哪些事务隔离级别,默认是什么隔离级别?
Read Uncommitted
read commited (默认)
repeatable read
serializable
37、 LightDB默认自动提交吗?如何关闭?
默认自动提交,每一条 sql 都是一个事务
客户端关闭:\set autocommit off
用 begin 手动开启事务
38、 ltsql和libpq是什么关系?
ltsql是命令行启动终端 libpq是用于postgresql底层封包通迅的库,其中封装了postgresq客户端与服务端通迅的协议细节。
39、 在SQL中,intN的N单位是什么?在c语言中,intN的N单位是什么?
Sql N Byte
c语言N bit
40、 C语言编写的函数支持哪些传参类型?
值传递 引用传递 指针传递
41、 tid, cid, xid分别代表什么含义?何时会生成这些id
tuple id: 元组ID,创建元组时
cid:command id,插入元组时
xid:事务ID,开始事务时
42、 请描述分析java应用中内存中包含对象的过程以及步骤,找到占用内存最大的那个类
43、 查看sql的执行计划
select query from pg_stat_activity where state = ‘active’ limit 1 ; explain :query;
44、 查看sql的解释计划
EXPLAIN select query from pg_stat_activity where state = ‘active’ limit 1 ;
45、 查看正在执行的sql的执行计划
select query from pg_stat_activity where state = ‘active’ ;
46、 如何查看一个包含order by的sql语句是否使用了临时文件
explain query, 然后查看是否有"external merge" or “external sort”
47、 执行计划是在什么时候生成的?
Parse bind execute
48、 如何查看对象的依赖关系
SELECT classid::regclass AS dependent_object,
refclassid::regclass AS referenced_object
FROM pg_depend
WHERE objid=‘2’::regclass;
49、 一个实例有两个db,如何查看所有表上的锁及被谁占用?
SELECT pg_class.relname AS table_name, pg_locks.*
FROM pg_locks
JOIN pg_class ON pg_locks.relation = pg_class.oid
WHERE pg_class.relkind = ‘r’
AND pg_locks.database = (SELECT oid FROM pg_database WHERE datname = ‘1382524’);
50、 如何查询lightdb中的所有定时任务及其最近的执行状态
安装扩展lt_cron select * from cron.job;
51、 分布式数据库是实例级别还是db级别?如何确定当前是否为分布式数据库模式
db 级别
select * from canopy_tables ; 是否失败
52、 lt_initdb和initdb
lt_initdb初始化实例,会创建lightdb相关扩展以及初始化相关GU参数,lt_initdb最终会调用initdb. initdb是pg自带的。
53、 如何确定一个参数是否可会话级修改、可通过reload加载生效
SELECT name, setting, source
FROM pg_settings
WHERE name = ‘guc_parameter’;
如果source为user, 表示这是会话级的,其它值表示为实例级的。
54、 lt_hba.conf的作用是什么?
控制客户端的连接认证
55、 优化器提示的作用是什么?是哪个extension控制优化器提示的?
优化器提示的用于辅组生成执行计划,pg_hint_plan
56、 PWR的作用是什么?
参考AWR的功能设定进行实现,主要用于监控数据运行时的各项指标,如机器基本配置信息,SQL各种计划统计,DBTIME统计,等
57、 PWR的采集频率如何?存储在什么地方?
 PWR中数据源于pg_stat_activity等相关模块,C端每1秒钟采集一次进入内存表(lt_stat_cost_1s),之后每1分钟将此表的数据归档入lt_stat_cost_60s, 每10分钟,通过take_sample函数归档入lt_stat_cost_600s。
58、 PSH的作用是什么?
ASH - Active Session History
采集数据库中正在执行的 sql 语句的资源消耗情况。简而言之,AWR 用于历史数据分析,ASH 用于实时数据分析。
59、 PSH的采集频率如何?存储在什么地方?
ASH以V$SESSION为基础,每秒采样一次,记录活跃会话等待的事件。dba_hist_active_sess_history视图默认每十秒收集一次信息储存在磁盘中
60、 EM agent的作用是什么?
用于采集数据库和主机的监控数据提供给LightDB-EM做分析、处理、和展示
61、 如何查看agent中的所有采集任务、频率?
62、 所有的压测,建议最小的表记录数、执行次数、时长分别为多久?
63、 Hugepage的作用是什么?如何确定需要多大的hugepage?如何确定hugepage是否对lightdb生效了?
Hugepage可用于lightdb共享存储,相比于普通内存,大页内存页表更大,tlb查找更快,大页内存页表常驻内存可减少页表中断提高内存性能。需要多大的hugepage处决于数据库实例的数据大小。cat /proc/meminfo | grep Huge
64、 agent cpu高如何排查是谁造成?什么工具、如何定位?如何确定是哪个方法、哪个类
65、 agent 内存高如何排查,提供示例dump,找出具体对象?
66、 在PL/pgSQL中,哪些方式支持事务?
存储过程支持事务,函数不支持
67、 lightdb函数支持哪些特性
1、返回void 2、call调用 3、支持事务(错误) 4、可以带出参
68、 PL/pgSQL函数&过程和shell一样,也支持按位置定义参数
CREATE FUNCTION add_em(integer, integer) RETURNS integer AS KaTeX parse error: Can't use function '$' in math mode at position 9: SELECT $̲1 + $2; LANGUAGE SQL;
69、 lightdb到23年前最重要是兼容哪个数据库?
oracle mysql db2 sql server

1、 oracle匿名块
匿名代码块:以DECLARE或BEGIN开始,每次提交都被编译。匿名块因为没有名称,所以不能在数据库中存储并且不能直接从其他PL/SQL块中调用。
2、 oracle存储过程,包含游标、事务、bulk collect into、关联数组
所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。
游标是一个指向查询结果集的指针,PL/SQL有两种游标,分别是显式游标和隐式游标。
在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么都成功执行,完成整个工作单元操作,要么一个也不执行。
通过bulk collect减少loop处理的开销,使用Bulk Collect提高Oracle查询效率
关联数组用于表示数据元素的集合,可通过指定一个称为 键 的名称来检索这些数据元素。 D 关联数组的键由称为 元组 的标量表达式值的列表构成。 您可以将数组元组本身视为函数的假想参数列表,在引用该数组时系统将调用该函数来检索相应的数组值。
3、 pl/pgsql
PL/pgSQL是一种块结构语言,函数定义的所有文本都必须在一个块内,其中块中的每个声明和每条语句都是以分号结束,如果某一子块在另外一个块内,那么该子块的END关键字后面必须以分号结束,不过对于函数体的最后一个END关键字,分号可以省略

4、pg中::代表什么意思,与哪个函数对应
符号其实是一个强制类型转换符,作用等同于CAST
5、如何备份testdb数据库中ltschema下不以_tmp结尾的所有表
pg_dump -U postgres -d postgres -T *_tmp --schema=public > back1.sql
6、如何将现有的单点实例转换为1主2从的高可用部署
7、ltclusterd和ltcluster的区别是什么?
Ltcluster命令行终端启动 ltclusterd守护进程运行状态
oracle->lightdb迁移
mysql->lightdb迁移

lightdb-em的主要竞品是谁?
mysql workbench、pganalyze
MySQL Workbench 安装及使用_AnZhiJiaShu的博客-CSDN博客
postgresql 使用 analyze 收集统计信息_analyze verbose-CSDN博客

待补充lightdb开发规范

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值