OBCA认证知识点-part5

1、SQL引擎支持MySQL和Oracle兼容模式。

OBCA认证知识点-part5_第1张图片

2、SQL引擎对Oracle的兼容性,当前 OceanBase 兼容 Oracle 11g 语法,支持 90%的 Oracle 数据 类型和内置函数,支持分布式执行的存储过程(PL/SQL),OceanBase 也将持续投入,未来 会更好的兼容 Oracle。

OBCA认证知识点-part5_第2张图片

 

3、创建、查看和删除数据库

使用CREATE DATABASE语句创建数据库

CREATE DATABASE [IF NOT EXISTS] dbname

[create_specification_list]

使用SHOW DATABASES语句查看数据库

SHOW DATABASES;

使用DROP DATABASE 语句删除数据库

DROP DATABASE my_db;

4、创建、查看、删除表

使用 CREATE TABLE 语句在数据库中创建新表

CREATE TABLE [IF NOT EXISTS] tblname

(create_definition,...)

[table_options]

[partition_options];

举例:

CREATE TABLE test(c1 int primary key,c2 VARCHAR(50));

使用SHOW CREATE TABLE语句查看建表语句

SHOW CREATE TABLE test;

使用 DROPTABLE 语句删除数据库表

DROP TABLE [IF EXISTS] table_list;

table_list:

tblname [,tblname...];

举例:

DROP TABLE test;

DROP TABLE IF EXISTS test;

使用SHOW TABLES语句查看数据库中所有表

SHOW TABLES FROM my_db;

5、索引是创建在表上的,对数据库表中一列或多列的值进行排序的一种结构。其作用主要在于提高查询的速度,

降低数据库系统的性能开销。

创建索引

CREATE [UNIQUE] INDEX indexname ON tblname(index_col_name,...) [index_type] [index_options]

查看索引

SHOW INDEX FROM tblname;

删除索引

DROP INDEX indexname ON tblname;

6、数据库事务(database transaction)是指作为单个逻辑工作单元执行的一系列操作。事务处理可以用来维护数据库的完整性,保证成批的SQL操作全部执行或全部不执行。通过begin transaction,或begin和begin work(被作为start transaction的别名受到支持)语句显示开始,以commit(提交)或rollback(回滚)语句显示结束。

OBCA认证知识点-part5_第3张图片

OBCA认证知识点-part5_第4张图片

 

 

7、传统关系型数据库一般采用“堆表”的架构,磁盘上有表空间,会划分出不同的段(Extend), 每个段再划分为若干页(Block),磁盘有一个根节点,段和页是随着数据的不断插入来不停分 配的。在内存里,跟磁盘表空间对应的是 Buffer Pool,无论应用读取数据,还是修改数据, 都需要把数据从硬盘的表空间装载到内存里,在内存里完成数据的读和写,修改后的数据就是 “脏数据”,这些“脏数据”最终还是要落入到硬盘表空间里,内存的 Buffe Pool 和硬盘的表 空间是一一对应的,也就是数据从哪里读出来的,也写回到哪里。

8、传统数据库有随机写、写放大等问题。

内存 Buffer Pool 的数据是相对紧凑、相对有序的。但是,在表空间上,有可能是非常离散的,比如图中所示,内存的 4 个页是紧凑的,但对应到硬盘上,四个页分布 的非常分散。当内存中 Buffer Pool 的脏数据要写回硬盘表空间时,会有一个很严重的随机写的问题。

这种随机写会导致严重的写放大,不仅影响写操作性能,而且会显著降低 SSD 的寿命,所以传统数据库一般使用高端读写型SSD。

数据的读取还是写,都是以页或者段为单位,即使要修改的数据很少,比 如只是修改了 1 个页内的几个字节,也需要把整页更新到硬盘的表空间中,造成写放大。这种写放大是数据库架构带来的,跟 SSD 硬盘的写放大没有关系,即使使用传统的 SATA 或者 SAS 硬盘,依然也存在这个问题。

OBCA认证知识点-part5_第5张图片

 

 

9、准“内存数据库”+LSMTree存储,避免随机写

OceanBase 是一个准内存数据库的架构,存储又采用 LSM Tree 的架构,可以有效解决随机写和写放大的问题。

OceanBase 把内存分为了两块,一块是 MemTable,用于写;一块是热点缓存,用于读。

所有对数据的修改,比如 insert、update 等,都会先放到内存的 MemTable 中,所以可以认 为 MemTable 是用于存储“脏数据”的。MemTable 中的数据不像传统数据库那样不定期的 进行 check point 到硬盘中,它会在内存中保存较长时间,当内存空间快满的时候,或者到了 某个固定的时间(比如凌晨 2 点这种系统不太繁忙的时段),或者由人工触发,把内存的一大 批脏数据批量的写回到硬盘上,这个过程叫转储,转储的数据还是增量数据,只是已经落盘了, 它还需要与硬盘的 SS Table 的基线数据进行合并,形成新的基线数据。

OBCA认证知识点-part5_第6张图片

 

 

10、OceanBase 相当于把传统数据库的多频次的、每次都是小数据量的 check point 变成不频繁的、每次都是大数据量的 check point。这可以带来三个好处:

(1):内存的脏数据批量合并之后,顺序写入 SSD 硬盘的,避免了随机写,提高了写性能, 延长了 SSD 寿命;

(2):传统数据库,delete 操作之后的空间不知道什么时候会再用到,容易造成磁盘碎片。 OceanBase 采用了 LSM Tree 架构,数据在磁盘上默认按主键有序排列,当内存里的大量的增量数据和磁盘基线数据合并时,会重新排序,然后以批量写的形式顺序写到硬盘上,可以很容易的把原有的碎片去掉,减少磁盘碎片,提升存储利用率;

(3):因为每次写回到硬盘的数据量都很大,可以支持对很大一批数据进行采样,因此它的压缩比传统数据库要高。

11、当应用要读取数据时,要从基线数据、热点缓存中读取数据,OceanBase 服务器还需要查看硬盘中的转储数据,以及内存中 MemTable 中的数据,确保读数据的强一致性。

12、OceanBase 的“准内存数据库”+“LSM Tree 存储”的架构,不仅可以有效的提升 性能,也可以极大的降低存储成本。

13、OceanBase转储和合并

OBCA认证知识点-part5_第7张图片

 

OBCA认证知识点-part5_第8张图片

 

 

14、LSMTree存储高数据压缩率,降低存储需求。

OceanBase 一般会进行两次压缩。

第一次是 encoding,会使用字典、RLE 等算法对数据做瘦身。

第二次是通用压缩,使用 lz4 等压缩算法对 encoding 之后的数据再做一次瘦身, OceanBase 支持 snappy、lz4、lzo,zstd 等压缩算法,允许用户在压缩率和解压缩时间上 做权衡

OBCA认证知识点-part5_第9张图片

 

 

15、备份/恢复,全局一致性的数据备份/恢复。

OceanBase 支持全量备份和增量备份,全量备份是对存储层的基线数据进行备份,增量 备份是通过 redo-log 备份,OceanBase 支持在线实时的全量和增量备份,对业务无感知。

(1) 备份支持 2 种介质,一种是阿里云 OSS 存储,另外一种是普通的 NFS。NFS 需要一个 公共目录,每个 OB Server 都可以访问,NFS 服务器为每台 OB Server 创建子目录, 用于存储备份文件。

(2) 备份性能可以达到网卡的上限,约 1G 左右。恢复性能,一般也可以达到 500 兆左右。

(3) 备份恢复最小粒度是租户,让备份和恢复更加灵活。

(4)备份恢复数据方面,支持逻辑数据(比如用户权限、表定义、系统变量、用户信息、视 图信息等)和物理数据。

OBCA认证知识点-part5_第10张图片

 

 

16、查看SQL的执行计划-explain命令

语法:explain [extended] \G

使用方便,无需创建单独系统表,可直接获取语句的执行计划。

extended选项会产生更多的详细信息,排查执行计划问题时建议指定。

命令的输出格式和Oracle数据库的explain工具比较接近,可读性好。

只是获取执行计划,并不会真正执行。

17、OceanBase 的内存分为两个部分,一部分是 MemStore(用于写),另外一部分用于读,

具体划分的比例由这个参数指定“'memstore_limit_percentage”,默认情况是 50%,也就是如果租户有 10G 内存可以用,那么会分配 5G 给 MemStore 用于写。 管理员可以通过查询“__all_virtual_tenant_memstore_info”系统表,获得各个租户的 内存使用情况。

查看非 Memstore 内存的使用情况,可以查询“__all_virtual_memory_info”这 张表。这张表也是按租户区分的。非 Memstore 内存的使用情况,也可以按租户和模块来区分。可以查看哪些系统模块占用 内存较多。

查看每台机器上数据盘的使用情况 __all_virtual_disk_stat

查看每个zone里数据盘的使用情况 __all_virtual_disk_stat

__all_server

查看集群合并状态select * from __all_zone where name = 'merge_status';

合并需要耗费较多的系统资源。管理员可以查询当前各个 Zone 的合并状态,有任何 Zone 正在合并的话, 集群自身的状态就会显示为“MERGING“的状态。各个 Zone 已经合并完成了,状态更新为“IDLE“。

18、使用JDBC连接数据库时,如果是MySQL租户,可以使用标准的MySQL驱动,如果是Oracle租户,不能使用Oracle驱动,需要使用OceanBase开发的JDBC驱动。

19、为避免内存中数据丢失,redo-log以WAL机制实时落盘,保证数据持久性。

20、mini freeze是最简单的dump操作,多个mini freeze的数据会异步合并,多个minor freeze会实时合并,但不会和SSTable合并。

 

OBCA认证知识点-part5_第11张图片

喜欢我的文章希望和我一起成长的宝宝们,可以搜索并添加公众号TryTestwonderful ,或者扫描下方二维码添加公众号

你可能感兴趣的:(数据库)