[InnoDB 学习1-7] 两次写
两次写(Double Write)
-------------------------------------
| 内存实例 |
| ------ copy -------------------- |
| |Page| ---> | | |
| ------ 1 | | |
| |doublewrite buffer| |
| ------ copy | | |
| |Page| ---> | | |
| ------ ------...
[InnoDB 学习1-6] 插入缓冲
插入缓冲(Insert Buffer)
Insert Buffer
作用
背景:
通常应用程序中行记录的插入顺序是按照主键递增的顺序进行插入的。因此,插入聚集索引(Primary Key)一般是顺序的,不需要磁盘的随机读取。
但并不是所有的主键都是顺序的,例如UUID。那么插入和辅助索引一样,同样是随机的。即使主键是自增类型,但插入的是指定的值,而不是NULL值(手动指定主键值),那么同样可能导致插入非连续的情况。
不可能每张表上只有一个聚集索引,更多情况下,一张表上有多个非聚集的辅助索引(secondary index)。(比如,用户需要按照name字段进行查找,且这个字段不是唯一的)
这种情况下,产生了一个非聚集的且不是唯一的索引。在进行插入操作时,数据页的存放还是按...
[InnoDB 学习1-5] Master Thread
Master Thread
具有最高的线程优先级别。
由多个循环组成:(Master Thread会根据数据库运行状态在其中切换)
主循环(loop)
后台循环(backgroud loop)
刷新循环(flush loop)
暂停循环(suspend loop)
主循环(loop)
主要是2大部分操作:每秒的操作、每10秒的操作。
通过thread sleep实现,时间并不精确,负载大可能会延迟。
每秒的操作:
日志缓冲刷新到磁盘,即使这个事务还没有提交。(总是)
合并插入缓冲。(可能,IO压力小时)
至多刷新100个InnoDB的缓冲池中的脏页到磁盘。(可能,脏页比率大时)
如果没有用户活动,则切换到background...
[InnoDB 学习1-4] checkpoint
Checkpoint技术
缓冲池的设计目的是为了协调CPU速度与磁盘速度的鸿沟。因此页的操作首先都是在缓冲池中完成的。如果一条DML语句,如Update/Delete改变了页中的记录,那么此时页是脏的,即缓冲池中的页版本要比磁盘的新。数据库需要将新版本的页从缓冲池刷新到磁盘。
若每次一个页发生变化,就将新页刷新到磁盘,那么这个开销是非常大的。
同时,如果在从缓冲池将页的新版本刷新到磁盘时发生了宕机,那么数据就不能恢复了。
为了避免发生数据丢失的问题,当前事务数据库系统普遍采用了Write Ahead Log策略,即当事务提交时,先写重做日志,再修改页。当由于发生宕机而导致数据丢失时,通过重做日志来完成数据的恢复。(这也是事务ACID中D(Durability持久性)的要...
[InnoDB 学习1-3] 重做日志
重做日志
作用
InnoDB存储引擎的内存区域除了有缓冲池外,还有重做日志缓冲(redo log buffer)。
InnoDB存储引擎首先将重做日志信息先放入到这个缓冲区,然后按一定频率将其刷新到重做日志文件。
重做日志缓冲一般不需要设置很大,因为每秒都会将重做日志缓冲刷新到日志文件,因此用户只需要保证每秒产生的事务量在这个缓冲大小之内即可。(默认为16MB)
mysql> show variables like 'innodb_log_buffer_size';
+------------------------+----------+
| Variable_name | Value |
+------------------------+-...
[InnoDB 学习1-2] 内存
内存
缓冲池
InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。
在数据库系统中,由于CPU速度与磁盘速度之间的鸿沟,基于磁盘的数据库系统通常使用缓冲池技术来提高数据库的整体性能。
原理:
缓冲池就是一块内存区域,通过内存的速度来弥补磁盘速度较慢对数据库性能的影响。
读:在数据库中进行读取页的操作,首先将从磁盘读到的页存放在缓冲池中。下次再读到相同的页时,首先判断该页是否在缓冲池中。若在缓存池中,称该页在缓冲池中被命中,直接读取该页。否则,读取磁盘上的页。
写:对于数据库中页的修改操作,则首先修改在缓冲池中的页,然后再以一定频率刷新到磁盘上。(注:页从缓冲池刷新回磁盘的操作并不是在每次页发生更新时触发,而是通过一种称为Checkpoint的机制刷新...
[InnoDB 学习1-1] 后台线程
后台线程
Master Thread
Master Thread是一个非常核心的后台线程,主要负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性:包括脏页的刷新、合并插入缓冲(INSERT BUFFER)、UNDO页的回收等。
IO Thread
引擎使用大量AIO(Async IO)来处理IO请求,这样可以极大提高数据库的性能。
IO Thread的主要工作是负责这些IO请求的回调(call back)处理。有4类IO Thread,分别是write、read、insert buffer、log IO thread。(InnoDB 1.0.x,read thread和write thread增多到4个,可调。)
mysql> show variables like...
[ros] radar408
毫米波雷达
安装can驱动
https://www.innodisk.com/tw/support_and_service/download 搜索B202下载驱动。
cd EMUC-B202/Linux/EMUC-B202_SocketCAN_Driver_v2.5_utility_v2.7
make clean
make
#sudo insmod emuc2socketcan.ko
#lsmod
#sudo sh -c 'echo "emuc2socketcan" >> /etc/modules'
echo "emuc2socketcan" | sudo tee -a /etc/modules
sudo cp emuc2socketcan.ko /lib/m...
共计 74 篇文章,10 页。