- 博客(65)
- 资源 (6)
- 收藏
- 关注
原创 MySQL系列—14.锁
解释一下下面的过程,事务1开始开始事务,更新id为1的记录获得id=1的记录的排他锁,事务2再开始事务,更新id=2获得id=2的记录的排他锁,再接着事务1去获取id为2的记录的排他锁,等待。在InnoDB存储引擎中,LOCK_IS,LOCK_IX,LOCK_AUTO_INC都算是表级锁的模式,LOCK_S和LOCK_X既可以算是表级锁的模式,也可以是行级锁的模式。而写操作肯定针对的是最新版本的记录,读记录的历史版本和改动记录的最新版本本身并不冲突,也就是采用MVCC时,读-写操作并不冲突。
2024-10-12 15:27:59
1575
原创 达梦数据库系列—50.SQL绑定HINT
为 SQL 语句注入 HINT 规则,是指无需修改 SQL 语句,通过 SF_INJECT_HINT 为该 SQL 注入 HINT 规则,随后该 SQL 按照注入的 HINT 规则运行的功能。通过 SF_INJECT_HINT 注入的 HINT 称为 INJECT HINT。
2024-10-09 13:48:11
767
原创 MySQL系列—13.事务
一般来说,读已提交是比较常用的隔离级别,它可以避免脏读,同时提供了较好的并发性能。幻读是指在一个事务中,两次查询返回的行数不同,这是因为其他事务插入或删除了数据。数据一致性要求:如果系统对数据一致性要求很高,那么应该选择较高的隔离级别,以确保数据的正确性。: 同一个事务在两次查询期间,由于其他事务的插入操作,导致查询结果集中出现之前不存在的行。: 一个事务正在对数据进行修改,在这个事务提交或回滚之前,这些修改对其他事务是可见的。: 同一个事务在两次查询期间,由于其他事务的修改或删除,导致查询结果不一致。
2024-09-19 14:24:53
920
原创 MySQL系列—12.Undo log
DML操作导致数据变化将变化前的记录写入Undo日志。作用用于记录更改前的一份copy,在操作出错时,可以用于回滚、撤销还原,只将数据库逻辑地恢复到原来的样子你时,至少要把这条记录的主键值记下来,之后回滚的时候只需要把这个主键值对应的记录删掉就好了。(对于每个INSERT,InnoDB存储引擎会完成一个DELETE)你,至少要把这条记录中的内容都记下来,这样之后回滚时再把由这些内容组成的记录插入到表中就好了。(对于每个DELETE,innoDB存储引擎会执行一个INSERT)你。
2024-09-18 22:29:50
1410
原创 MySQL系列—11.Redo log
redo log用于记录事务操作变化,记录的是数据被修改之后的值,(tbs space id + page no + action)。尚未完成的DML,数据库崩溃则用log恢复。保证事务持久性。1在页面修改完成之后,脏页刷入磁盘之前,写入Redo日志;2实现WAL:日志比数据页先写回磁盘3聚簇索引二级索引Undo页面修改,记录Redo日志;4至少要有2个redo log,文件名序号从0开始,从ib_logfile0到ib_logfileN#redo log。
2024-09-18 20:25:54
1011
原创 MySQL系列—10.Innodb行格式
我们平时的数据以行为单位来想表中插入数据,这些记录在磁盘上的存放方式也被称为行格式或者记录格式。InnoDB存储引擎设计了 4 种不同类型的行格式,分别是Compact、Redundant、Dynamic 和 Compressed行格式。
2024-09-10 17:38:31
1387
1
原创 MySQL系列—9.Innodb页
页a、页b、页c . . .页n 这些页可以不在物流结构上相连,只要通过双向链表相关联即可。每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表。
2024-09-10 14:42:13
1378
原创 MySQL系列—8.物理结构
User data (innodb_file_per_table=0,不使用独立表空间的时候,用户数据会存储共享表空 间中,有可能会存放在系统表空间。如: innodb_data_file_path=/dayta/mysql/ibdata1:100M:autoextend。系统表空间由参数innodb_data_file_path定义路径、初始化大小、自动扩展策略。类似于Oracle的表空间概念,多个Table放在同一个表空间中。1.系统表空间 ibdata。2.通用表空间 .ibd。
2024-09-09 16:51:22
622
原创 MySQL系列—7.内存结构
对于聚集索引页,DML操作带来的数据磁盘读取和缓存修改往往是顺序的、集中的,这就很好 地利用了聚集索引的优点,但随着聚集索引页的顺序IO,各个二级索引页的读取和修改通常是随 机IO的。而Change buffer将分散的、未缓存的二级索引页的变化进行缓存而非直接从磁盘中读 取索引页,待到其他操作需要访问二级索引时,只需将change buffer中的变化缓存合并然后加 入缓冲池(buffer pool)就行了,这样就大大地减少了磁盘随机读取的IO。可以控制change buffer只对部分类操作生效。
2024-09-02 14:48:18
912
原创 MySQL系列—6.权限管理
MySQL权限控制主要是集中在5张表中,user,db,tables_priv,columns_priv,procs_priv每次启 动会直接加载到内存中。e.执行SQL语句时的检查,依次检查user表、db表、tables_priv, columns_priv, procs_priv表里查看是否具有相应权限。a. 用户连接时,MySQ server首先从user表里匹配host, user, password,匹配不到则拒绝 Mysql client的连接。
2024-08-27 17:23:17
929
原创 MySQL系列—5.用户管理
user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中加载到内存 里,不然其他session无法连接。指定网段: 'dbadmin'@'10.%' or '192.168.%' or '172.21.120.%'具体IP: 'dbadmin'@'192.168.120.21' 1。所有网段: 'dbadmin'@%
2024-08-27 16:48:35
795
原创 MySQL系列—4.Mysql安装
2. 通过 mysqld 启动。# /usr/local/mysql/bin/mysqld --defaults-file=my.cnf &MySQL的版本命名遵循⼀种特定的模式,通常采⽤X.Y.Z的形式,其中X、Y和Z分别代表主版本号、次版本号和修 订版本号。1. 查看错误⽇志。2. 查看 mysqld 进程是否启动。创建 systemd 服务配置⽂件。3. 只指定⼏个必要的参数启动。使⽤ systemd 管理服务。如何查看 glibc 的版本。1. 查看错误⽇志。
2024-08-26 17:43:58
810
原创 MySQL系列—3.体系架构
MySQL Connector是MySQL提供的⼀组官⽅的数据库连接器,⽤于在不同编程语⾔中连接和 操作MySQL数据库。这些连接器充当数据库驱动程序,提供了与MySQL服务器进⾏通信的接⼝。连接池是⼀个保存和复⽤数据库连接的缓冲区。它允许在需要时从池中获取连接,⽽不 是每次请求时都重新创建连接。线程管理是MySQL⽤于处理客户端请求的组件。对于每个客户端连接, MySQL会为其分配⼀个线程来处理查询和其他数据库操作。这⾥会验证⽤户的账号密码。接受客户端发起的 SQL 语句。
2024-08-26 17:17:45
1100
原创 MySQL系列—2.Mysql简介
MySQL 是最流⾏的开源数据库(https://db-engines.com/en/ranking)。MySQL被⼴泛⽤于Web开发、企业应⽤、嵌⼊式系统等各种场景。其稳定性、性能和灵活性使其成为许多开发者 和企业的⾸选数据库系统之⼀。以下是MySQL的⼀些关键特点和概念:1. 关系型数据库管理系统(RDBMS):MySQL采⽤关系型数据库模型,数据存储在表格中,表之间通过关系建 ⽴联系。这种结构有助于更有效地组织和管理数据。2. 开源。
2024-08-21 11:35:42
900
原创 MySQL系列—1.数据库的基本概念
在操作系统出现之后,随着计算机应⽤范围的扩⼤、需要处理的数据迅速膨胀。最初,数据与程序⼀样,以简单的 ⽂件作为主要存储形式。以这种⽅式组织的数据在逻辑上更简单,但可扩展性差,访问这种数据的程序需要了解数 据的具体组织格式。当系统数据量⼤或者⽤户访问量⼤时,应⽤程序还需要解决数据的完整性、⼀致性以及安全性 等⼀系列的问题。因此,必须开发出⼀种系统软件,它应该能够像操作系统屏蔽了硬件访问复杂性那样,屏蔽数据 访问的复杂性。由此产⽣了数据管理系统,即数据库。
2024-08-21 11:08:15
1032
原创 ClickHouse集群的安装
我们分别创建账户reader和writer,然后把只读角色ro分配给reader,把读写角色分配给writer。新建一个数据库用户acai,并设置密码(将下文的<你的密码>替换)。使用下列命令访问clickhouse数据,show databases得到acaidb,说明我们成功了。创建一个角色acaidb_rw, 该角色针对数据库acaidb具备读写权限。如果让一个角色只允许select,不允许修改数据,下面的语句就可以。shard table:同上,对应的已经创建的本地表表名。见文档《hbase文档》
2024-08-19 17:24:00
1547
原创 达梦数据库系列—48.DMHS实现Mysql到DM8的同步
exec_policy=2表示执行事务出错时,忽略出错的操作后继续执行;ddl_continue=1表示DDL操作同步出错时,继续往下操作。如果执行卡住,删除bin/log下的日志以及bin目录下的dmhs_cpt.tmp。注意:mysql端的item表名用小写,DM端的用户名表名必须用大写。然后重启dmhs_server,再执行clear exec lsn。源端:Mysql8.0.35,RH7.5。源端cpt启动,目标端exec会自动启动。1、获取不到映射表的字段信息。目标端:DM8,麒麟V10。
2024-08-15 14:17:42
1229
原创 达梦数据库系列—49.审计功能
审计文件默认存放在数据库的 SYSTEM_PATH 指定的路径,即数据库所在路径。系统的启动、关闭、部分系统事件以及一些系统过程和函数的调用,此级别的审计无法也无需由用户进行设置,只要审计开关打开就会自动生成对应审计记录。单个审计文件的大小可以通过动态参数 AUDIT_MAX_FILE_SIZE 指定。系统级审计无法无需由用户进行设置,只要审计开关打开就会自动生成对应审计记录。TYPE:审计文件类型,0 表示删除普通审计文件,1 表示删除实时审计文件。语句级审计的动作只针对用户,不对应具体的数据库对象。
2024-08-15 10:57:24
2753
原创 达梦数据库系列—47.DMHS实现Oracle12C到DM8的同步
exec_policy=2表示执行事务出错时,忽略出错的操作后继续执行;ddl_continue=1表示DDL操作同步出错时,继续往下操作。把libdmoci.so上传到DM端的/dmhs/bin目录下。源端cpt启动,目标端exec会自动启动。没有数据库可参考该步骤创建,否则略过。源端:Oracle12C,RH7.5。目标端:DM8,麒麟V10。
2024-08-12 16:56:56
1226
原创 达梦数据库系列—46.DMHS实现DM8到DM8的同步
exec_policy=2表示执行事务出错时,忽略出错的操作后继续执行;ddl_continue=1表示DDL操作同步出错时,继续往下操作。没有数据库可参考该步骤创建,否则略过。目标端:DM8,麒麟V10。源端:DM8,麒麟V10。
2024-08-12 16:50:38
1040
原创 达梦数据库系列—45.系统存储过程总结
-SCOPE 参数为 2 表示只在 INI 文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数。--SCOPE 参数为 1 表示在内存和 INI 文件中都修改参数值,此时只能修改动态的配置参数。--SCOPE 参数为 1 表示获取 INI 文件中配置参数的值。--SCOPE 参数为 1 表示获取 INI 文件中配置参数的值。--SCOPE 参数为 1 表示获取 INI 文件中配置参数的值。--SCOPE 参数为 2 表示获取内存中配置参数的值。//系统生成C2上的INDEX为33555481。
2024-08-02 15:57:24
1099
原创 达梦数据库系列—44.SQL调优
2、SQL 单独执行时间可能很快,在几百毫秒到几秒之间,但执行频率非常高,甚至达到每秒上百次,高并发下执行效率降低,很可能导致系统瘫痪,此类 SQL 是优化的首要对象。ET 功能默认关闭,可通过配置 INI 参数中的 ENABLE_MONITOR=1、MONITOR_SQL_EXEC=1 开启该功能。1、SQL 执行时间在十几秒到数十秒之间,但执行频率不高,此类 SQL 对数据库整体性能影响并不大,可以放到最后进行优化。执行 SQL 语句后,客户端会返回 SQL 语句的执行号。
2024-08-02 15:49:22
1326
原创 达梦数据库系列—43.HINT
使用 HINT IGNORE_ROW_ON_DUPKEY_INDEX 则可以忽略该冲突,冲突数据既不进行插入也不会报错,其他非冲突插入正常进行。T3,T1,T2 或 T1,T3,T2 不被考虑。
2024-08-01 11:23:15
2108
原创 达梦数据库系列—42.查询转换
查询转换是优化器自动做的,在生成执行计划之前,等价改写查询语句的形式,以便提升效率和产生更好的执行计划。观察执行计划,由于C2字段无索引,子查询X部分本应该走全表扫描,但是计划中却走了C1字段的索引。观察原始sql,T2的子查询是个非关联的子查询,完全可以把它生成一个独立的子计划。sql中使用过多的视图,会使sql变得复杂,优化器也难以生成最佳的执行计划,不能过度依赖优化器进行视图拆分。查询转换是指把经过语法、语义分析的查询块之间的连接类型、嵌套关系进行调整,生成一个更好的查询计划。
2024-08-01 11:15:42
884
原创 达梦数据库系列—41.表连接方式
优化器会选择一张代价较小的表作为驱动表,另一张表作为被驱动表,驱动表的每条记录与被驱动表进行一次连接操作。Merge Join 是先将关联表的关联列各自做排序,然后从各自的排序表中抽取数据,到另一个排序表中做匹配。如果没有索引,随机读很致命,每次循环只能读一块,不能读多块。以一张表的连接列为哈希键,构造哈希表,另张表的连接列进行哈希探测,找到满足条件的记录。- 两个表都需要按照连接列排序,需要消耗大量的cpu和额外的内存。全连接的查询结果是左外连接和右外连接查询结果的并集。- 无驱动表之分,随机读很少。
2024-07-31 15:59:51
1872
原创 达梦数据库系列—40.执行计划
2.优化器基于字典信息的数据分布统计值、执行语句涉及到的表、索引和分区的存储特点来估算每个执行计划的代价。生成计划指计划生成器对给定的查询按照连接方式、连接顺序、访问路径生成不同的执行计划,选择代价最小的一个作为最终的执行计划。SAGR:流分组聚集,用于分组列是有序的情况下,可以使用流分组聚集,C1上已经创建了索引,SAGR2性能优于HAGR2。HAGR:分组聚集,用于分组列没有索引只能走全表扫描的分组聚集,C2列没有创建索引。SLCT:关系的“选择” 运算,用于查询条件的过滤。
2024-07-31 15:55:47
2196
原创 达梦数据库系列—39.统计信息详解
频率直方图为列中的每个不同值维护一个行数信息,这种直方图适用于NDV(不同值个数)比较小的场景。可以想象,如果有一张表格记录了一家公司的全部员工信息(每一个人一行信息),对于“籍贯”这一栏,不同值的个数很小(全国约有40个省、直辖市和行政区),我们可以为该列建立一个频率直方图,优化器通过该直方图可以知道该公司每个省或者直辖市的员工有多少人。继续考虑上面的员工信息表,如果表中有一列是“年纳税总额”,我们可以对该列收集等高直方图,从而很容易准确的估计出该公司“年纳税总额超过10万”的人数。
2024-07-30 17:17:59
2102
原创 达梦数据库系列—38.全文检索
中文最多分词:可以将存在二义性的词划分出来,例如:“和服装”会生成“和”、“和服”、“服”、“服装”和“装”。中文最少分词:最少分词,其消除了存在二义性的词,即前面举例的文本分词的结果为“和”、“服装”两个词,这样可以减少大量冗余词的存储,能进行更准确的匹配。对于非结构化数据,即全文数据,要想实现检索,一般都是采用模糊查询的方式实现的。当用户填充全文索引时,系统才将定义了全文索引的文本列的内容进行分词,并根据分词结果填充索引。英文分词:即根据英文分隔符的分词,对超过 32 个字节的英文单词进行了拆分处理。
2024-07-30 17:01:21
2376
原创 达梦数据库系列—37.列存储表
混合表空间存储 HUGE 表是通过 HFS 存储机制来管理的,它相当于一个文件系统。为混合表空间指定一个 HUGE 数据文件路径,其实就是创建一个空的 HUGE 数据文件目录(系统中有一个默认的混合表空间 MAIN,其 HUGE 数据文件目录名为 HMAIN)。orders 表的区大小为 65536 行,文件大小为 64M,指定所在的混合表空间为 ts1,o_comment 列指定的区大小为不做统计信息,其它列(默认)都做统计信息,指定列 o_comment 列压缩类型为查询高压缩率,压缩级别为 9。
2024-07-29 11:20:13
1240
原创 达梦数据库系列—36.分区表
例如,可以对表上的 status 列的值在('A','H','O')放在一个分区,值在('B','I','P')放在另一个分区,以此类推;仅范围分区和 LIST 分区支持交换分区。哈希(hash)水平分区:通过指定分区编号来均匀分布数据的一种分区类型,通过在 I/O 设备上进行散列分区,使得这些分区大小基本一致;范围(range)水平分区:对表中的某些列上值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上;PARTITION p2 VALUES ('上海', '南京', '杭州'),
2024-07-29 11:11:29
2428
原创 达梦数据库系列—35.DM常用SQL
可以通过 ini 参数 TEMP_SIZE 配置大小、TEMP_SPACE_LIMIT 设置上限、存储过程 SP_TRUNC_TS_FILE 来收缩 TEMP 表空间文件(生产环境请谨慎使用)。SUM(A.TOTAL_SIZE)/1024.0/1024.0 TOTAL_M, --当前总量(包括扩展)SUM(A.DATA_SIZE) /1024.0/1024.0 DATA_SIZE_M --实际使用量。sum(page_size)*sf_get_page_size 缓冲池大小_G,
2024-07-28 18:54:02
934
原创 达梦数据库系列—34.健康检查
每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。
2024-07-26 11:42:56
1269
原创 达梦数据库系列—33.日志总结
用户可以调用系统过程 SP_SET_SQLLOG_INI()或SP_DELETE_SQLLOG_INI_MODE()来动态修改 sqllog.ini 文件的内容,修改后可以调用系统过程 SP_REFRESH_SVR_LOG_CONFIG()更新内存中对应的参数值,以使所做的修改生效。利用动态视图 V$DM_SQLLOG_INI 可以查询 sqllog.ini 文件中的 SQL 日志配置参数,利用动态视图 V$DM_SQLLOG_CONFIG 可以查询内存中的 SQL 日志配置参数。
2024-07-26 11:34:20
3777
原创 达梦数据库系列—32.多版本并发控制MVCC
在串行化隔离级别下,数据库管理系统会严格控制事务的执行顺序,通过加锁来实现的,如果一个事务正在修改数据,其他试图select或修改同一数据的事务将被阻塞,直到第一个事务完成。可重复读是Innodb的默认隔离级别,使用MVCC实现,可重复读情况下,不会出现脏读,不会读取到其他事务已提交的数据,多次读取结果一致,即可重复读。但是可能导致“幻读”。DM 数据库基于物理记录和回滚记录实现行级多版本支持,数据页中只保留物理记录的最新版本,通过回滚记录维护历史版本,所有事务针对特定的版本进行操作。
2024-07-25 11:27:03
1158
原创 达梦数据库系列—31. 事务和锁
它以事务号作为锁的对象,为每个活动事务生成一把TID锁,用于防止多个事务同时修改同一行记录。如表中第二行 第二列为“Y” ,表示如果某个事务已经加了 IS 锁时,其他事务还可以继续添加 IS 锁,第二行 第五列为“N” ,表示如果某个事务已经加了 IS 锁时,其他事务不能添加 X 锁。被阻塞的事务将一直挂起,直到持有锁的事务放弃锁定的资源为止。对象锁是 DM 新引入的一种锁,通过统一的对象 ID 进行封锁,将对数据字典的封锁和表锁合并为对象锁,以达到减少封锁冲突、提升系统并发性能的目的。
2024-07-25 11:20:27
1642
原创 达梦数据库系列—30. DTS迁移Mysql到DM
1 表示 ASC 升序排序时 NULL 值在最后返回, DESC 降序排序时 NULL 值在最前面返回, 在参数等于 1 的情况下, NULL 值的返回与 ORACLE 保持一致;2 表示 ASC 升序排序时 NULL 值在最前面返回, DESC 降序排序时 NULL 值在最后返回,在参数等于 2 的情况下, NULL 值的返回与 MYSQL 保持一致。⑧ 源一次读取行数:设置从数据源中读取数据时每次读取数据的行数,该参数决定内存中缓存结果集的大小,对于数据量很大的数据源,设置该参数,可以控制内存的使用。
2024-07-21 16:12:14
1343
原创 达梦数据库系列—29. DTS迁移ORACLE到DM
(3)BLANK_PAD_MODE:空格填充参数,是否要兼容 Oracle 进行设置,即在 BLANK_PAD_MODE = 0 的情况下,’A’ 和 ’A ’ 被认为是相同的值,参数为 1 的情况下,认为是两个不同的值,根据现场具体应用的需求进行设置。以上示例中,出现视图失败的情况,经查询是由于视图的查询字段中“percent”,是达梦中的关键字,在Oracle中不会出现报错,解决办法是把percent大写,双引号引起来,拿到达梦数据库中执行。当数据量比较大时,减小该参数的值可以减少内存的使用。
2024-07-21 16:04:19
1432
goldengate实现ORACLE到MYSQL的同步
2018-01-26
Oracle Resource manager
2018-01-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人