MySQL InnoDB purge源码解析
purge 数据库系统中,事务删除记录时,不会立即从B树中删除,而是打上删除标记。这样做有以下两个原因: 实现事务的隔离性。事务在删除记录并提交后,其他事务可能需要访问这条记录,只有当记录对所有活动事务都不可见时,才可以从B树中删除。打上删除标记后,其他事务通过key或索引扫描可以定位到这条记录,判断删除对当前事务不可见、或通过记录上rollptr找到undo日志拼装出最...
purge 数据库系统中,事务删除记录时,不会立即从B树中删除,而是打上删除标记。这样做有以下两个原因: 实现事务的隔离性。事务在删除记录并提交后,其他事务可能需要访问这条记录,只有当记录对所有活动事务都不可见时,才可以从B树中删除。打上删除标记后,其他事务通过key或索引扫描可以定位到这条记录,判断删除对当前事务不可见、或通过记录上rollptr找到undo日志拼装出最...
Mini Transaction MySQL InnoDB中,mtr是一个非常重要的模块,主要控制redo日志和数据页锁。 redo日志 redo日志即数据库的预写日志(WAL),有以下两个作用: 提高事务的提交速度。事务修改的数据页在磁盘上极有可能是不连续的,刷盘将会是随机IO,效率较差。事务会将所有对数据页的修改记录成redo日志,提交时只需保证这些redo日志刷...
事务 事务是数据库操作中的一个重要概念,它可以将一系列数据库操作作为一个不可分割的工作单元,并保证这些操作要么全部执行成功,要么全部失败回滚。事务具有ACID属性,是保证数据一致性和可靠性的重要手段。 事务的ACID属性 原子性:Atomicity,整个数据库事务是不可分割的工作单位 一致性:Consistency,事务将数据库从一种状态转变为下一种一致的状态 隔离性:Iso...
PostgreSQL自定义文本检索分词规则 PostgreSQL的倒排索引十分强大,虽然为文本检索设计,但也可以移植到其他用途。 有如下数据表,其中tagset是一系列tag的集合: id tagset 1001 “tag_01 tag_02 tag_05” ...
PostgreSQL虚拟文件描述符(VFD) 在操作系统中,每当一个进程打开一个文件,系统就会为该文件分配一个唯一的文件描述符,在Linux系统中是一个int类型的值。每个操作系统都会对一个进程能打开的文件数加以限制,用ulimit -n命令可以查看进程能打开的最大文件数。对于一个数据库系统,系统元数据和用户数据都可能保存在许多不同文件当中,而且常常会对大表进行排序、hash join等操...
PostgreSQL文本搜索(六)——词典 词典用于消除在搜索中不应考虑的词(停顿词),并使词规范化,以便同一词的不同派生形式能够匹配。一个成功规范化的词被称为lexeme(词位、词素)。除了提高搜索质量之外,规范化和删除停顿词可以减少文档的tsvector的大小,从而提高性能。规范化并不总是具有语言学意义,通常取决于实际应用决定的语义。 一些规范化的例子: 语言学–Ispell...
PostgreSQL文本搜索(七)——自定义配置 文本搜索配置指定了将文档转化为tsvector所需的所有选项:使用词法分析器将文本分解为token,以及使用词典将每个token转化为lexeme。每一次对to_tsvector或to_tsquery的调用都需要一个文本搜索配置来执行其处理。配置参数default_text_search_config指定了默认配置的名称,如果省略了一个明确...
PostgreSQL文本搜索(五)——词法分析器 文本搜索词法分析器负责将原始文档文本分割成token,并确定每个token的类型,其中可能的类型集合由词法分析器本身定义。注意分析器根本不修改文本,它只是识别合理的词的边界。由于这种有限的范围,对特定应用的自定义分析器的需求比对自定义字典的需求要少。目前PostgreSQL只提供了一个内置的分析器,它已经被发现对广泛的应用很有用。 内置的...
PostgreSQL文本搜索(二)——表和索引 上一节的例子说明了使用简单的常量字符串进行全文匹配。本节展示了如何搜索表数据,或选择使用索引。 搜索表 可以在没有索引的情况下进行全文检索。一个简单的查询是打印在body字段中包含friend这个词的所有行的title: SELECT title FROM pgweb WHERE to_tsvector('english', body)...
PostgreSQL文本搜索(一)——简介 文本搜索对于数据库系统来说是一个十分重要的功能,它可以在数据库文本文档(包括表中的text字段等)中搜索一个模式,可以是一个或多个单词、短语、短句,并且可以按照相关度排序。最常见的文本搜索是找到所有包含给定查询项的文本文档,然后按照与查询项的相似度排序并返回。查询项和相似度的定义都非常灵活,取决于具体的应用。这个最简单的搜索将查询看作一组单词,将...