CN116860858B - 数据库操作级别的io跟踪方法、装置、设备及介质 - Google Patents

数据库操作级别的io跟踪方法、装置、设备及介质 Download PDF

Info

Publication number
CN116860858B
CN116860858B CN202311118623.4A CN202311118623A CN116860858B CN 116860858 B CN116860858 B CN 116860858B CN 202311118623 A CN202311118623 A CN 202311118623A CN 116860858 B CN116860858 B CN 116860858B
Authority
CN
China
Prior art keywords
access
block
data block
accessed
access mode
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202311118623.4A
Other languages
English (en)
Other versions
CN116860858A (zh
Inventor
王勇
姚延栋
翁岩青
于宁
高小明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Siweizongheng Data Technology Co ltd
Original Assignee
Beijing Siweizongheng Data Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Siweizongheng Data Technology Co ltd filed Critical Beijing Siweizongheng Data Technology Co ltd
Priority to CN202311118623.4A priority Critical patent/CN116860858B/zh
Publication of CN116860858A publication Critical patent/CN116860858A/zh
Application granted granted Critical
Publication of CN116860858B publication Critical patent/CN116860858B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明实施例提供了一种数据库操作级别的IO跟踪方法、装置、设备及介质,涉及数据库技术领域,其中,该方法包括:针对数据库操作的每次IO访问,确定该IO访问所访问的文件的数据类型;确定该IO访问所访问的每个数据块的块号和访问模式;通过块链表的方式记录访问的每个数据块的块号和访问模式;通过CPU指令计算相邻IO访问的时间间隔;统计每个数据类型的文件中每个访问模式所访问的数据块的占比信息,并根据时间间隔统计IO访问的时间信息。该方案实现了数据库操作级别的每次IO访问的跟踪记录,可以为数据库操作级别的IO分析提供准确、可靠的数据依据;实现了记录的紧凑存储、精简化、轻量化,有利于记录文件的在线开启。

Description

数据库操作级别的IO跟踪方法、装置、设备及介质
技术领域
本发明涉及数据库技术领域,特别涉及一种数据库操作级别的IO跟踪方法、装置、设备及介质。
背景技术
计算机系统中,磁盘访问(统称为IO访问)是比内存访问要慢地多的操作。在数据库中,它往往是耗时的大头。而IO(输入/输出)访问次数特别多,因此记录IO访问的成本很高,目前,需要有既能针对查询级别、又足够轻量、能够在线使用的机制。
下面是一些常见的记录IO访问的方法及其缺点。
操作系统级别的工具:大多数操作系统提供了工具来监视和跟踪磁盘IO,例如Linux上的iostat、iotop和dstat命令,Windows上的性能监视器(Performance Monitor)等。这些工具可以提供有关磁盘IO的详细信息,包括读写速度、IO队列长度、响应时间等。但是,这些统计信息较粗,且无法区分是其它业务还是数据库行为,更不能细分到查询粒度,只能做大致的评估。
数据库系统内部工具:许多数据库系统提供了内部工具或命令,用于监视和跟踪数据库的IO活动。例如,在Oracle中,可以使用AWR报告(Automatic Workload Repository)和ASH报告(Active Session History)来获取有关IO的统计信息。在MySQL中,可以使用SHOW ENGINE INNODB STATUS命令来获取InnoDB存储引擎的IO状态。但是,这些统计信息可以在线获取,但它往往包含了一段时间内的所有IO访问行为,因此无法用于分析个别查询IO的情况。
存储引擎日志:某些数据库存储引擎可能记录了IO操作的日志,可以通过查看这些日志文件来了解数据库的IO活动。例如,InnoDB存储引擎在错误日志中记录了重要的IO操作,可以通过检查错误日志来获取相关信息。但是,这些日志只能用于记录重要的事件,相对记录的事件较少,而无法用于分析性能。
Oracle数据库提供了SQL Trace功能,它使用数据库跟踪(Database Tracing)来捕获和记录SQL执行期间的相关信息。通过在会话级别启用跟踪,Oracle会将跟踪信息写入跟踪文件(trace file),其中包含了SQL语句、执行计划、IO操作、等待事件等详细信息。可以使用Oracle Trace文件解析工具(如TKPROF)来解析和分析跟踪文件。但是,这些Trace日志过于详细,输出量大,对于查询执行时间有明显的影响,不适合在线随时开启。
发明内容
有鉴于此,本发明实施例提供了一种数据库操作级别的IO跟踪方法,以解决现有技术中IO跟踪结果无法用于数据库操作级别的IO分析、跟踪结果文件不够轻量化无法在线开启的技术问题。该方法包括:
针对数据库操作的每次IO访问,确定该IO访问所访问的文件的数据类型;
在所访问的文件中,确定该IO访问所访问的每个数据块的块号和访问模式;
通过块链表的方式记录访问的每个数据块的块号和访问模式;
通过CPU指令计算相邻IO访问的时间间隔;
统计每个数据类型的文件中每个访问模式所访问的数据块的占比信息,并根据所述时间间隔统计IO访问的时间信息。
本发明实施例还提供了一种数据库操作级别的IO跟踪装置,以解决现有技术中IO跟踪结果无法用于数据库操作级别的IO分析、跟踪结果文件不够轻量化无法在线开启的技术问题。该装置包括:
数据类型确定模块,用于针对数据库操作的每次IO访问,确定该IO访问所访问的文件的数据类型;
访问信息确定模块,用于在所访问的文件中,确定该IO访问所访问的每个数据块的块号和访问模式;
记录模块,用于通过块链表的方式记录访问的每个数据块的块号和访问模式;
时间计算模块,用于通过CPU指令计算相邻IO访问的时间间隔;
统计模块,用于统计每个数据类型的文件中每个访问模式所访问的数据块的占比信息,并根据所述时间间隔统计IO访问的时间信息。
本发明实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意的数据库操作级别的IO跟踪方法,以解决现有技术中IO跟踪结果无法用于数据库操作级别的IO分析、跟踪结果文件不够轻量化无法在线开启的技术问题。
本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述任意的数据库操作级别的IO跟踪方法的计算机程序,以解决现有技术中IO跟踪结果无法用于数据库操作级别的IO分析、跟踪结果文件不够轻量化无法在线开启的技术问题。
与现有技术相比,本说明书实施例采用的上述至少一个技术方案能够达到的有益效果至少包括:提出了针对数据库操作的每次IO访问进行跟踪记录,在确定该IO访问所访问的文件的数据类型的情况下,确定该IO访问所访问的每个数据块的块号和访问模式,通过CPU指令计算相邻IO访问的时间间隔,进而可以统计每个数据类型的文件中每个访问模式所访问的数据块的占比信息和IO访问的时间信息,以得到跟踪统计结果。实现了数据库操作级别的每次IO访问的跟踪记录,且实现了跟踪统计结果包括每个数据类型的文件中每个访问模式所访问的数据块的占比信息和IO访问的时间信息,由于本申请发明人发现不同数据类型的文件访问、不同访问模式均会影响访问性能,因此该跟踪统计结果包括每个数据类型的数据文件中每个访问模式所访问的数据块的占比信息和IO访问的时间信息的情况下,可以为数据库操作级别的IO分析提供准确、可靠的数据依据,以利于实现有效、准确的数据库操作级别的IO分析;上述跟踪方法在满足数据库操作级别的IO分析的数据集需求的同时,还提出了在访问过程中通过块链表的方式记录访问的每个数据块的块号和访问模式,实现了记录的紧凑存储,既减少了内存分配时间,也极大地减少了遍历链表的时间,实现了记录的精简化、轻量化,有利于跟踪记录文件的在线开启,进而有利于提高记录IO访问过程的效率;此外,还提出了通过CPU指令计算相邻IO访问的时间间隔,可以大大地降低计算开销,有利于提高效率。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1是本发明实施例提供的一种数据库操作级别的IO跟踪方法的流程图;
图2是本发明实施例提供的一种计算机设备的结构框图;
图3是本发明实施例提供的一种数据库操作级别的IO跟踪装置的结构框图。
具体实施方式
下面结合附图对本申请实施例进行详细描述。
以下通过特定的具体实例说明本申请的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本申请的其他优点与功效。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。本申请还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本申请的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在本发明实施例中,提供了一种数据库操作级别的IO跟踪方法,如图1所示,该方法包括:
步骤101:针对数据库操作的每次IO访问,确定该IO访问所访问的文件的数据类型;
步骤102:在所访问的文件中,确定该IO访问所访问的每个数据块的块号和访问模式;
步骤103:通过块链表的方式记录访问的每个数据块的块号和访问模式;
步骤104:通过CPU指令计算相邻IO访问的时间间隔;
步骤105:统计每个数据类型的文件中每个访问模式所访问的数据块的占比信息,并根据所述时间间隔统计IO访问的时间信息。
由图1所示的流程可知,在本发明实施例中,实现了数据库操作级别的每次IO访问的跟踪记录,且实现了跟踪统计结果包括每个数据类型的文件中每个访问模式所访问的数据块的占比信息和IO访问的时间信息,由于本申请发明人发现不同数据类型的文件访问、不同访问模式均会影响访问性能,因此该跟踪统计结果包括每个数据类型的文件中每个访问模式所访问的数据块的占比信息和IO访问的时间信息的情况下,可以为数据库操作级别的IO分析提供准确、可靠的数据依据,以利于实现有效、准确的数据库操作级别的IO分析;上述跟踪方法在满足数据库操作级别的IO分析的数据集需求的同时,还提出了在访问过程中通过块链表的方式记录访问的每个数据块的块号和访问模式,实现了记录的紧凑存储,既减少了内存分配时间,也极大地减少了遍历链表的时间,实现了记录的精简化、轻量化,有利于跟踪记录文件的在线开启,进而有利于提高记录IO访问过程的效率;此外,还提出了通过CPU指令计算相邻IO访问的时间间隔,可以大大地降低计算开销,有利于提高效率。
具体实施时,上述数据库操作可以包括查询操作、写入操作等。
具体实施时,数据库一般将用户数据存入少量大文件中,而自行管理整个大文件空间的布局。例如,功能强大的开源数据库PosgreSQL 以如下方式组织数据文件:
1)数据存放在主数据文件中,主数据文件通常由多个文件组成。单个文件的大小的设置可以兼顾连续IO、文件句柄资源和数据重新组织等因素,一般是1GB。
2)每个文件都是一段(segment)数据。这些数据段按顺序连接在一起,组织了逻辑上的主数据文件。
3)存储引擎会跟踪每个文件的数据块的使用状态(例如,已分配、空闲等状态),并维护相应的数据结构来管理数据块的使用。
具体的,上述访问的文件即是指组成主数据文件的各个文件。
具体实施时,本申请发明人发现,即使对不同数据类型的文件访问同样的特征,访问性能也是不同的,即文件的数据类型对性能的影响也有很大的差异,因此,提出了区分访问文件的数据类型,并需要分开数据类型来统计每个数据类型的文件的IO访问情况,以使得IO跟踪数据可以更准确、有效的为IO耗时分析、优化分析等分析提供数据依据。具体的,上述文件的数据类型可以包括元数据、数据文件和索引文件等。
具体实施时,在确定该IO访问所访问的数据文件的数据类型的过程中,可以根据块存储接口包含的信息(比如表的信息)来直接推断出数据文件的数据类型。具体的,一般数据库都会提供block(数据块)层的接口,而上层会以不同方式调用这些接口。如果数据库的块存储接口包含比如表的信息,可以直接推断出数据文件的数据类型,则只需要调用包装的函数。该包装函数里实现IO trace信息的维护,参数列表和原函数完全一致。否则(如果数据库的块存储接口不包含比如表的信息),需要在block层接口扩展一个表示数据类型的参数,即表示元数据、数据文件和索引文件等数据类型的参数,可以通过代码插桩的方式实现。而数据文件的信息都会带在块访问接口中。同步修改调用接口以增加这个数据类型的参数信息即可。另外,通过精简的代码插桩,简化了接入trace的软件工程的代价。
具体实施时,数据块是文件管理的基本单元,也是IO访问的基本单元。一次IO访问,往往可以访问多个数据块,一次IO访问所访问的所有数据块的块号可以形成一个序列。本申请发明人发现,访问模式对IO访问的延时有很大影响,不同的访问模式存在不同的IO访问的延时,例如,如下表1所示,访问模式(pattern)可以包括命中缓存(cache)、反复读同一页(repeated)、顺序访问(sequence)、前向访问(forward)以及后向访问(backward)等模式,各个访问模式对访问性能的延时影响如表1的性能影响项所示。
表1
具体实施时,为了进一步使得IO跟踪数据可以更准确、有效的为IO耗时分析、优化分析等分析提供数据依据,提出了确定IO访问所访问的每个数据块的访问模式,例如,将该IO访问所访问的当前数据块的块号与上一数据块的块号进行大小比较,如果相同,则确定当前数据块的访问模式是反复读同一页模式;如果大于(即当前数据块的块号大于上一数据块的块号),则确定当前数据块的访问模式是前向访问模式;如果大于1(即当前数据块的块号比上一数据块的块号大于1),则确定当前数据块的访问模式是顺序访问模式;如果小于(即当前数据块的块号小于上一数据块的块号),则确定当前数据块的访问模式是后向访问模式;和/或,
判断该IO访问所访问的当前数据块与访问上一数据块的时间间隔是否小于10微秒,若是,则确定当前数据块的访问模式是命中缓存模式。
具体实施时,一次IO访问所访问的所有数据块的块号可以形成一个序列,通过确定访问每个数据块的访问模式后,在该序列中连续的、为同一访问模式的块号可以形成一个子序列,即可以得到多个不同访问模式对应的子序列,不同访问模式的子序列会对IO延时有很大影响,例如,如果是命中缓存(cache)访问模式,耗时很短,则延时会极大的提升、缩短。
具体实施时,为了提高IO跟踪记录的轻量化,提出了在IO跟踪过程中精简地记录每次IO访问所访问的每个数据块的块号和访问模式,为了进一步提高开启或遍历记录文件的效率,提出了采用块链表(Block record,其是一个不断追加链表)的方式记录每次IO访问所访问的每个数据块的块号和访问模式,例如,通过当前一个页面来记录访问的每个数据块的块号和访问模式,在当前一个页面记录满时再追加下一个页面进行记录。
具体实施时,块链表的方式即一个块里放若干个记录,放满一个页面,再追加下一个页面。从而实现记录的紧凑存储,既减少了内存分配时间,也减少遍历链表的时间。具体的,记录最精简的形式即为 blocknum(块号),也可以视情况需要扩展成更复杂、详细的形式。
具体实施时,为了实现可去重(不重块的数据结构)、准确、高效地统计出每个访问模式所访问的数据块的占比信息,提出了采用连续的内存空间记录数据块的访问标记的方式统计访问的不同数据块的总数,例如,统计每个数据类型的数据文件中每个访问模式所访问的数据块的占比信息,包括:
针对每个数据类型的文件的数据块访问情况,设置连续的内存空间,该连续的内存空间内的标记位与数据块的块号一一映射;
将被访问过的数据块的块号映射的标记位置为1,通过统计1的数量来统计每次IO访问所访问的数据块的总数;
根据每个访问模式所访问的数据块的数量和所述总数,统计每个访问模式所访问的数据块的占比。
具体实施时,为了进一步提高统计1的数量的效率,并实现连续的内存空间的紧凑存储,提出了在所述连续的内存空间中划分一个分区,该分区内的标记位与数据块访问情况中存在访问的连续数据块范围内的块号一一映射;
在该分区内将被访问过的数据块的块号映射的标记位置为1,当扫描的数据块的块号不在所述连续数据块范围内时,则在所述连续的内存空间中新分配一个分区,将该新的分区的标记位与当前扫描的数据块的块号映射。
具体实施时,连续的内存空间可以被分成若干段的得到多个分区,每个分区的大小可以根据具体的记录需求确定,例如,以总的连续的内存空间的1/16大小划分成若干个分区,每个分区的大小按2的幂次对齐。访问的文件以32GB为例,如果只扫描了文件的前2GB的空间,则只需要分配32KB空间的分区即可。如果扫描到分配空间之外的部分(即扫描的数据块的块号与分区的标记位不存在映射),则新分配一个分区。
具体实施时,可以在连续的内存空间中划分一个分区,其他分区视数据块的扫描情况确定是否继续划分,该划分的分区的标记位与针对数据块访问情况中存在访问的连续数据块范围内的块号一一映射,例如,数据块访问情况中存在被访问数据块的连续数据块范围1,该连续数据块范围1之后的一段连续数据块范围2内不存在被访问过的数据块,则可以建立连续数据块范围1内数据块的块号与分区内的标记位的映射,不建立连续数据块范围2内数据块的块号与分区内的标记位的映射,以实现分区可以紧凑的存储被访问过的数据块对应的标记位,使得分区记录的标记位为1的概率较大,避免分区存在较多的空位,同时也可以提高遍历、统计分区内1的数量的效率。上述各个分区形成的内存形式可以称为blockmap。
具体实施时,为了进一步提高统计1的数量的效率,降低计算开销,提出了通过cpu提供的popcount指令统计1的数量,以统计被访问的数据块的总数。例如,采用popcount指令,高效地统计单个分区有多少个标记位为1,即有多少个被访问的数据块,然后将各个分区的标记位为1的数量汇总起来得到被访问的数据块的总数。
具体实施时,为了进一步降低计算开销,提出了通过cpu提供的TSC指令计算相邻IO访问的时间间隔。例如,由于IO访问次数很多,时间统计的计算开销变得不可忽略。本实施例提出了采用cpu提供的TSC(timestamp counter,时间戳计数器)来获取和统计时间。可以用一条CPU指令即可得到当前时间的一个表示。它需要知道CPU系统的时钟频率,以换算出准确的IO访问的时间间隔。
具体实施时,在IO访问结束后,可以将统计的每个数据类型的文件中每个访问模式所访问的数据块的占比和统计的IO访问的时间信息输出并展示,也可以输出访问的指定表的文件访问详细记录,该详细记录可以包括上述占比、时间信息以及上述记录访问过程中块号和访问模式的Block record。
以下介绍执行上述数据库操作级别的IO跟踪方法的具体过程,该过程包括如下步骤:
1、建立Trace(跟踪)上下文。
上述数据库操作以查询操作为例,查询开始,一般有一个建立的过程,比如在PostgreSQL时在,它叫做Executor_Start。在这个过程中,初始化需要的上下文。它包括:
1.1从 /proc/cpuinfo里读出当前cpu的时钟频率。
1.2为每种数据类型初始化block map。
1.3为每种pattern初始化统计值。
2、针对每次IO访问,取该次IO访问前后的时间差,根据时钟频率换算成实际的时间间隔,然后进行如下统计和信息维护。
2.1 针对每个数据类型,增加该数据类型的总的block 访问计数。
2.2 将访问的当前数据块的块号和上一数据块的块号(block number)比较大小,如果相同,则当前数据块的访问模式是repeat;如果大于,则当前数据块的访问模式是forward;否则(即如果小于),当前数据块的访问模式是backward模式。
2.3如果当前数据块的块号比上一数据块的blocknumber大1,则当前数据块的访问模式是sequence模式。
2.4 判断是否为cache模式。精确判断cache读的难度比较大,鉴于即使是最快的SSD盘的延时也在50个微秒以上,而内存访问则小于1微秒。因此提出如果访问当前数据块与访问上一数据块的时间间隔小于10微秒,则判断当前数据块的访问模式是cache,这样判断的访问基本不会有错漏。
2.5 追加块记录到block record里,即通过块链表的方式存储每个访问数据块的块号和访问模式。
3、总结和展示。
当查询结束的时候,比如在PostgreSQL里对应的是 Executor_end,进行数据的统计汇总。具体的。
3.1计算所有被访问的数据块的块数。遍历整个blockrecord,在blockmap里将被访问数据块的块号映射的标记位置1,如果数据块的块号超出了当前分区的标记位的映射范围,计算该次IO访问的相关的block(数据块)对应的分区,分配该分区的内存空间。采用popcount指令,高效地统计单个分区有多少个标记位置1,即该分区对应有多少个数据块被访问,然后,将各个分区的统计的1的数量汇总起来得到每次IO访问所有被访问数据块的总数。
3.2 用每个访问模式所访问的数据块的块数除以总的块数来计算每种数据类型的文件中,每种访问模式的数据块的占比、最大访问时间以及平均访问时间等。
3.3 在日志文件里输出不同访问模式的统计信息。
3.4 可选地,在日志中集中输出查询的指定表的文件访问详细记录,用于后续更全面的分析。这种分析通常是在数据库软件的开发过程中。
在本实施例中,提供了一种计算机设备,如图2所示,包括存储器201、处理器202及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意的数据库操作级别的IO跟踪方法。
具体的,该计算机设备可以是计算机终端、服务器或者类似的运算装置。
在本实施例中,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述任意的数据库操作级别的IO跟踪方法的计算机程序。
具体的,计算机可读存储介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机可读存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读存储介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
基于同一发明构思,本发明实施例中还提供了一种数据库操作级别的IO跟踪装置,如下面的实施例所述。由于数据库操作级别的IO跟踪装置解决问题的原理与数据库操作级别的IO跟踪方法相似,因此数据库操作级别的IO跟踪装置的实施可以参见数据库操作级别的IO跟踪方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图3是本发明实施例的数据库操作级别的IO跟踪装置的一种结构框图,如图3所示,该装置包括:
数据类型确定模块301,用于针对数据库操作的每次IO访问,确定该IO访问所访问的文件的数据类型;
访问信息确定模块302,用于在所访问的文件中,确定该IO访问所访问的每个数据块的块号和访问模式;
记录模块303,用于通过块链表的方式记录访问的每个数据块的块号和访问模式;
时间计算模块304,用于通过CPU指令计算相邻IO访问的时间间隔;
统计模块305,用于统计每个数据类型的文件中每个访问模式所访问的数据块的占比信息,并根据所述时间间隔统计IO访问的时间信息。
在一个实施例中,访问信息确定模块用于将该IO访问所访问的当前数据块的块号与上一数据块的块号进行大小比较,如果相同,则确定当前数据块的访问模式是反复读同一页模式;如果大于,则确定当前数据块的访问模式是前向访问模式;如果大于1,则确定当前数据块的访问模式是顺序访问模式;如果小于,则确定当前数据块的访问模式是后向访问模式;和/或,判断该IO访问所访问的当前数据块与访问上一数据块的时间间隔是否小于10微秒,若是,则确定当前数据块的访问模式是命中缓存模式。
在一个实施例中,记录模块,用于通过当前一个页面来记录访问的每个数据块的块号和访问模式,在当前一个页面记录满时再追加下一个页面进行记录。
在一个实施例中,统计模块,包括:
标记单元,用于针对每个数据类型的文件的数据块访问情况,设置连续的内存空间,该连续的内存空间内的标记位与数据块的块号一一映射,将被访问过的数据块的块号映射的标记位置为1;
计数单元,用于通过统计1的数量来每次IO访问所访问的数据块的总数;
统计单元,用于根据每个访问模式所访问的数据块的数量和所述总数,统计每个访问模式所访问的数据块的占比。
在一个实施例中,标记单元,还用于在所述连续的内存空间中划分一个分区,该分区内的标记位与数据块访问情况中存在被访问数据块的连续数据块范围内的块号一一映射;在该分区内将被访问过的数据块的块号映射的标记位置为1,当扫描的数据块的块号不在所述连续数据块范围内时,则在所述连续的内存空间中新分配一个分区,将该新的分区的标记位与当前扫描的数据块的块号映射。
在一个实施例中,计数单元,用于通过cpu提供的popcount指令统计1的数量,以统计被访问的数据块的总数。
在一个实施例中,时间计算模块,用于通过cpu提供的TSC指令计算相邻IO访问的时间间隔。
本发明实施例实现了如下技术效果:实现了数据库操作级别的每次IO访问的跟踪记录,且实现了跟踪统计结果包括每个数据类型的文件中每个访问模式所访问的数据块的占比信息和IO访问的时间信息,由于本申请发明人发现不同数据类型的文件访问、不同访问模式均会影响访问性能,因此该跟踪统计结果包括每个数据类型的数据文件中每个访问模式所访问的数据块的占比信息和IO访问的时间信息的情况下,可以为数据库操作级别的IO分析提供准确、可靠的数据依据,以利于实现有效、准确的数据库操作级别的IO分析;上述跟踪方法在满足数据库操作级别的IO分析的数据集需求的同时,还提出了在访问过程中通过块链表的方式记录访问的每个数据块的块号和访问模式,实现了记录的紧凑存储,既减少了内存分配时间,也极大地减少了遍历链表的时间,实现了记录的精简化、轻量化,有利于跟踪记录文件的在线开启,进而有利于提高记录IO访问过程的效率;此外,还提出了通过CPU指令计算相邻IO访问的时间间隔,可以大大地降低计算开销,有利于提高效率。
显然,本领域的技术人员应该明白,上述的本发明实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明实施例不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (9)

1.一种数据库操作级别的IO跟踪方法,其特征在于,包括:
针对数据库操作的每次IO访问,确定该IO访问所访问的文件的数据类型;
在所访问的文件中,确定该IO访问所访问的每个数据块的块号和访问模式;
通过块链表的方式记录访问的每个数据块的块号和访问模式;
通过CPU指令计算相邻IO访问的时间间隔;
统计每个数据类型的文件中每个访问模式所访问的数据块的占比信息,并根据所述时间间隔统计IO访问的时间信息;
确定该IO访问所访问的每个数据块的访问模式,包括:
将该IO访问所访问的当前数据块的块号与上一数据块的块号进行大小比较,如果相同,则确定当前数据块的访问模式是反复读同一页模式;如果大于,则确定当前数据块的访问模式是前向访问模式;如果大于1,则确定当前数据块的访问模式是顺序访问模式;如果小于,则确定当前数据块的访问模式是后向访问模式;和/或,
判断该IO访问所访问的当前数据块与访问上一数据块的时间间隔是否小于10微秒,若是,则确定当前数据块的访问模式是命中缓存模式。
2.如权利要求1所述数据库操作级别的IO跟踪方法,其特征在于,通过块链表记录访问的每个数据块的块号和访问模式,包括:
通过当前一个页面来记录访问的每个数据块的块号和访问模式,在当前一个页面记录满时再追加下一个页面进行记录。
3.如权利要求1至2中任一项所述数据库操作级别的IO跟踪方法,其特征在于,统计每个数据类型的数据文件中每个访问模式所访问的数据块的占比信息,包括:
针对每个数据类型的文件的数据块访问情况,设置连续的内存空间,该连续的内存空间内的标记位与数据块的块号一一映射;
将被访问过的数据块的块号映射的标记位置为1,通过统计1的数量来每次IO访问所访问的数据块的总数;
根据每个访问模式所访问的数据块的数量和所述总数,统计每个访问模式所访问的数据块的占比。
4.如权利要求3所述的数据库操作级别的IO跟踪方法,其特征在于,还包括:
在所述连续的内存空间中划分一个分区,该分区内的标记位与数据块访问情况中存在被访问数据块的连续数据块范围内的块号一一映射;
在该分区内将被访问过的数据块的块号映射的标记位置为1,当扫描的数据块的块号不在所述连续数据块范围内时,则在所述连续的内存空间中新分配一个分区,将该新的分区的标记位与当前扫描的数据块的块号映射。
5.如权利要求3所述的数据库操作级别的IO跟踪方法,其特征在于,通过统计1的数量来统计被访问的数据块的总数,包括:
通过cpu提供的popcount指令统计1的数量,以统计被访问的数据块的总数。
6.如权利要求1至2中任一项所述的数据库操作级别的IO跟踪方法,其特征在于,通过CPU指令计算相邻IO访问的时间间隔,包括:
通过cpu提供的TSC指令计算相邻IO访问的时间间隔。
7.一种数据库操作级别的IO跟踪装置,其特征在于,包括:
数据类型确定模块,用于针对数据库操作的每次IO访问,确定该IO访问所访问的文件的数据类型;
访问信息确定模块,用于在所访问的文件中,确定该IO访问所访问的每个数据块的块号和访问模式;
记录模块,用于通过块链表的方式记录访问的每个数据块的块号和访问模式;
时间计算模块,用于通过CPU指令计算相邻IO访问的时间间隔;
统计模块,用于统计每个数据类型的文件中每个访问模式所访问的数据块的占比信息,并根据所述时间间隔统计IO访问的时间信息;
所述访问信息确定模块,用于将该IO访问所访问的当前数据块的块号与上一数据块的块号进行大小比较,如果相同,则确定当前数据块的访问模式是反复读同一页模式;如果大于,则确定当前数据块的访问模式是前向访问模式;如果大于1,则确定当前数据块的访问模式是顺序访问模式;如果小于,则确定当前数据块的访问模式是后向访问模式;和/或,判断该IO访问所访问的当前数据块与访问上一数据块的时间间隔是否小于10微秒,若是,则确定当前数据块的访问模式是命中缓存模式。
8.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述的数据库操作级别的IO跟踪方法。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有执行权利要求1至6中任一项所述的数据库操作级别的IO跟踪方法的计算机程序。
CN202311118623.4A 2023-09-01 2023-09-01 数据库操作级别的io跟踪方法、装置、设备及介质 Active CN116860858B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311118623.4A CN116860858B (zh) 2023-09-01 2023-09-01 数据库操作级别的io跟踪方法、装置、设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311118623.4A CN116860858B (zh) 2023-09-01 2023-09-01 数据库操作级别的io跟踪方法、装置、设备及介质

Publications (2)

Publication Number Publication Date
CN116860858A CN116860858A (zh) 2023-10-10
CN116860858B true CN116860858B (zh) 2023-11-17

Family

ID=88230766

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311118623.4A Active CN116860858B (zh) 2023-09-01 2023-09-01 数据库操作级别的io跟踪方法、装置、设备及介质

Country Status (1)

Country Link
CN (1) CN116860858B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103902410A (zh) * 2014-03-28 2014-07-02 西北工业大学 云存储系统的数据备份加速方法
US10162597B1 (en) * 2012-09-11 2018-12-25 EMC IP Holding Company LLC Identifying IO access pattern in unique database structures
CN109542704A (zh) * 2018-11-23 2019-03-29 郑州云海信息技术有限公司 一种io请求追踪方法、装置及相关设备
CN111414135A (zh) * 2020-03-11 2020-07-14 国家海洋环境预报中心 一种高性能计算机系统的io效率优化方法
CN114895856A (zh) * 2022-07-12 2022-08-12 创云融达信息技术(天津)股份有限公司 一种基于高密度存储硬件的分布式存储系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6955142B2 (ja) * 2017-03-17 2021-10-27 富士通株式会社 情報処理装置、ストレージ制御方法およびストレージ制御プログラム

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10162597B1 (en) * 2012-09-11 2018-12-25 EMC IP Holding Company LLC Identifying IO access pattern in unique database structures
CN103902410A (zh) * 2014-03-28 2014-07-02 西北工业大学 云存储系统的数据备份加速方法
CN109542704A (zh) * 2018-11-23 2019-03-29 郑州云海信息技术有限公司 一种io请求追踪方法、装置及相关设备
CN111414135A (zh) * 2020-03-11 2020-07-14 国家海洋环境预报中心 一种高性能计算机系统的io效率优化方法
CN114895856A (zh) * 2022-07-12 2022-08-12 创云融达信息技术(天津)股份有限公司 一种基于高密度存储硬件的分布式存储系统

Also Published As

Publication number Publication date
CN116860858A (zh) 2023-10-10

Similar Documents

Publication Publication Date Title
US10754874B2 (en) Query dispatching system and method
US11132365B2 (en) Query plan based on a data storage relationship
US10824611B2 (en) Automatic determination of table distribution for multinode, distributed database systems
US9063973B2 (en) Method and apparatus for optimizing access path in database
US9218382B1 (en) Exponential histogram based database management for combining data values in memory buckets
US10372711B2 (en) System and method predicting effect of cache on query elapsed response time during application development stage
US9235590B1 (en) Selective data compression in a database system
JP6996812B2 (ja) 分散データベースにおけるデータブロックを処理する方法、プログラム、およびデバイス
Yoon et al. Mutant: Balancing storage cost and latency in lsm-tree data stores
WO2021073241A1 (zh) 一种基于磁盘存储的数据读取方法、装置及设备
CN109902101B (zh) 基于SparkSQL的透明分区方法及装置
US9471614B2 (en) Data allocation containers in a partitioned table of a computer database system for holding data based on usage
US20210349918A1 (en) Methods and apparatus to partition a database
CN116860858B (zh) 数据库操作级别的io跟踪方法、装置、设备及介质
CN107193857B (zh) 一种用于数据库遍历的方法与设备
CN109981774B (zh) 数据缓存方法和数据缓存装置
US20080162411A1 (en) Apparatus, system, and method for autonomically analyzing a database management system
US9354820B2 (en) VSAM data set tier management
Tomes et al. Towards adaptive parallel storage systems
Bitincka et al. Experiences with workload management in splunk
Cui et al. Performance Comparison Test of HBase and Cassandra Based on YCSB
US20160285984A1 (en) Method and system for processing measurement data for website statistics
Haghdoost et al. hfplayer: Scalable replay for intensive block I/O workloads
CN105279103A (zh) 一种数据管理方法及装置
CN117725095B (zh) 面向数据集的数据存储和查询方法、装置、设备及介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant