CN113392120A - 获取SQLite的执行信息的方法及装置 - Google Patents
获取SQLite的执行信息的方法及装置 Download PDFInfo
- Publication number
- CN113392120A CN113392120A CN202010171991.5A CN202010171991A CN113392120A CN 113392120 A CN113392120 A CN 113392120A CN 202010171991 A CN202010171991 A CN 202010171991A CN 113392120 A CN113392120 A CN 113392120A
- Authority
- CN
- China
- Prior art keywords
- sqlite
- calling
- execution information
- interface
- performance tuning
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请公开了一种获取SQLite的执行信息的方法及装置,属于计算机技术领域。本申请实施例通过将性能调优接口的调用参数设置为调用SQLite的性能调优接口,通过调用性能调优接口,以在SQLite中注册回调函数,这样在SQLite被调用时能够将执行信息回调给该注册的回调函数,无需改变原有的业务逻辑代码就能够获取到执行信息,从而大大减少了代码量,减少了人工成本,有效提高了获取效率。由于不需要改变原有的业务逻辑代码,任一业务逻辑调用SQLite时均能够实现执行信息的获取,通用性好,且不会对业务的稳定性造成影响。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种获取SQLite的执行信息的方法及装置。
背景技术
SQLite是Android程序中广泛使用的数据库,而SQLite的使用质量情况会直接影响到一些应用的体验,例如,一次耗时很长的查询可能会导致程序页面的响应延迟或者发生卡顿。因而,通常需要获取设备中SQLite的执行信息,来分析是否存在耗时较长的SQL语句。
目前,获取SQLite的执行信息的方法通常是通过打点统计来实现。具体的,开发人员在编写代码时,每次执行SQLite时编写相应的SQLite执行信息统计的代码,这样在执行代码时能够进行执行信息的统计和上报。
上述方法需要开发人员在编写代码时在每次SQLite执行处均添加相应的代码实现,因而,代码量很大。不同的应用或者业务均需要自己的开发人员根据自身的代码特点来编写相应的代码,通用性差,且由于需要对原有的业务逻辑代码进行改动,上述方法对业务的稳定性会造成影响。因而,上述方法的通用性差,获取效率低。
发明内容
本申请实施例提供了一种获取SQLite的执行信息的方法及装置,能够提高获取效率,提高检查效率。该技术方案如下:
一方面,提供了一种获取SQLite的执行信息的方法,该方法包括:
响应于SQLite连接指令,获取SQLite的性能调优接口的调用参数,所述调用参数用于指示调用所述SQLite的性能调优接口;
根据所述调用参数,调用所述SQLite的性能调优接口,通过所述性能调优接口向SQLite注册回调函数;
响应于对SQLite的调用指令,根据SQLite中注册的回调函数,将所述SQLite的执行信息回调至所述回调函数,得到所述SQLite的执行信息。
一方面,提供了一种获取SQLite的执行信息的装置,所述装置包括:
获取模块,用于响应于SQLite连接指令,获取SQLite的性能调优接口的调用参数,所述调用参数用于指示调用所述SQLite的性能调优接口;
调用模块,用于根据所述调用参数,调用所述SQLite的性能调优接口,通过所述性能调优接口向SQLite注册回调函数;
所述调用模块,还用于响应于对SQLite的调用指令,根据SQLite中注册的回调函数,将所述SQLite的执行信息回调至所述回调函数,得到所述SQLite的执行信息。
在一种可能实现方式中,所述调试类为android.database.sqlite.SQLiteDebug类;
所述性能调优接口为sqlite3_profile接口,所述调用参数为DEBUG_SQL_TIME变量;或,所述性能调优接口为sqlite3_trace接口,所述调用参数为DEBUG_SQL_STATEMENTS。
在一种可能实现方式中,所述装置还包括发送模块,所述发送模块用于执行下述任一项:
将所述SQLite的执行信息发送至目标设备;
对所述SQLite的执行信息进行分析,将符合目标条件的SQLite的执行信息发送至目标设备。
在一种可能实现方式中,所述SQLite的执行信息包括至少一个结构化查询语言SQL语句和每个SQL语句的执行时长;
所述发送模块用于:
获取所述SQLite的执行信息中至少一个SQL语句的执行时长;
响应于任一SQL语句的执行时长大于时长阈值,将所述SQL语句发送至目标设备。
一方面,提供了一种电子设备,该电子设备包括一个或多个处理器和一个或多个存储器,该一个或多个存储器中存储有至少一条程序代码,该至少一条程序代码由该一个或多个处理器加载并执行以实现如上述任一种可能实现方式的获取SQLite的执行信息的方法所执行的操作。
一方面,提供了一种存储介质,该存储介质中存储有至少一条程序代码,该至少一条程序代码由处理器加载并执行以实现如上述任一种可能实现方式的获取SQLite的执行信息的方法所执行的操作。
本申请实施例提供的技术方案带来的有益效果至少包括:
本申请实施例通过将性能调优接口的调用参数设置为调用SQLite的性能调优接口,通过调用性能调优接口,以在SQLite中注册回调函数,这样在SQLite被调用时能够将执行信息回调给该注册的回调函数,无需改变原有的业务逻辑代码就能够获取到执行信息,从而大大减少了代码量,减少了人工成本,有效提高了获取效率。由于不需要改变原有的业务逻辑代码,任一业务逻辑调用SQLite时均能够实现执行信息的获取,通用性好,且不会对业务的稳定性造成影响。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种获取SQLite的执行信息的方法的实施环境;
图2是本申请实施例提供的一种获取SQLite的执行信息的方法的流程图;
图3是本申请实施例提供的一种获取SQLite的执行信息的方法的实施环境;
图4是本发明实施例提供的一种获取SQLite的执行信息的方法的流程图;
图5是本申请实施例提供的一种获取SQLite的执行信息的装置的结构示意图;
图6是本申请实施例提供的一种终端的结构示意图;
图7是本申请实施例提供的一种服务器的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
本申请中术语“第一”“第二”等字样用于对作用和功能基本相同的相同项或相似项进行区分,应理解,“第一”、“第二”、“第n”之间不具有逻辑或时序上的依赖关系,也不对数量和执行顺序进行限定。
本申请中术语“至少一个”是指一个或多个,“多个”的含义是指两个或两个以上,例如,多个第一位置是指两个或两个以上的第一位置。
以下,对本申请涉及到的术语进行解释。
SQLite,一种广泛用于移动终端和客户端的轻量级文件数据库,是遵守ACID(Atomicity,Consistency,Isolation,Durability,原子性、一致性、隔离性、持久性)的关系型数据库管理系统。
SQLite3:即SQLite的版本(version)3,当前SQLite3广泛应用。
SQLite的执行信息:主要指执行的结构化查询语言(Structured QueryLanguage,SQL)语句及其耗时。
hook:也称作“挂钩”,是计算机程序设计术语,指通过拦截软件模块间的函数调用、消息传递、事件传递来修改或扩展操作系统、应用程序或其他软件组件的行为的各种技术。处理被拦截的函数调用、事件、消息的代码,被称为钩子(hook)。
慢SQL:执行耗时较大的SQL语句。
应用:可以是指安卓(Android)上层应用,即Android App。其中,APP为Application,指的是应用程序。
无侵入:接入某个方案时,本身的业务代码不需要修改也不受影响。
回调函数:是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
图1是本申请实施例提供的一种获取SQLite的执行信息的方法的实施环境的示意图。该实施环境包括:终端101和监控平台102。终端101通过无线网络或有线网络与监控平台102相连。
终端101可以是智能手机、游戏主机、台式计算机、平板电脑、电子书阅读器、MP3(Moving Picture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)播放器或MP4(Moving Picture Experts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器和膝上型便携计算机中的至少一种。终端101安装和运行有至少一个应用程序,例如,该应用程序可以是即时通讯应用、新闻推送应用、购物应用、在线视频应用、社交应用。在终端101中可以包括SQLite,终端101可以通过SQLite实现本地存储,在实现应用程序的业务逻辑时,可以调用该SQLite,执行相应的功能。在一种可能实现方式中,终端101能够在调用SQLite时获取并上报SQLite的执行信息给监控平台102。
监控平台102包括一台服务器、多台服务器、云计算平台和虚拟化中心中的至少一种。监控平台102用于为终端101提供的执行信息提供后台服务。可选地,监控平台102包括:服务器1021和数据库1022。服务器1021用于提供SQLite的执行信息有关的后台服务。服务器1021可以是一台或多台。当服务器1021是多台时,存在至少两台服务器1021用于提供不同的服务,和/或,存在至少两台服务器1021用于提供相同的服务,比如以负载均衡方式提供同一种服务,本申请实施例对此不加以限定。数据库1022存储有处理任务所需的数据,当服务器1021需要数据时,可以访问数据库1022,读取数据库1022存储的数据。当服务器处理任务,得到执行信息相关的信息时,可以将信息写入至数据库1022,从而通过数据库1022对信息进行持久化存储。
本领域技术人员可以知晓,上述终端101、服务器1021的数量可以更多或更少。比如上述终端101、服务器1021可以仅为一个,或者上述终端101、服务器1021为几十个或几百个,或者更多数量,本申请实施例对终端或服务器的数量和设备类型不加以限定。
SQLite本身提供有性能调优接口,从该性能调优接口可以注册回调得到SQLite的执行语句及其耗时。Android框架本身也有调用sqlite3_profile的代码,但一般默认不调用且不暴露给上层应用,这样则无法获取得到SQLite的执行信息。在本申请实施例中,通过对性能调优接口的调用参数进行修改,使得框架调用性能调优接口,并通过调用性能调优接口,在SQLite中注册回调函数,从而在调用SQLite时能够将统计到的SQLite的执行信息回调至注册的回调函数,即可获取得到SQLite的执行信息。
图2是本申请实施例提供的获取SQLite的执行信息的方法的流程图,该方法应用于电子设备中,参见图2,该方法可以包括以下步骤:
201、电子设备响应于参数配置指令,加载SQLite的调试类。
电子设备可以通过步骤201至步骤203,对SQLite的调用参数进行赋值,以使得赋值后的调用参数用于指示调用性能调优接口。
其中,参数配置指令用于指示将性能调优接口的调用参数进行赋值。该参数配置指令可以由相关技术人员根据需求进行触发,也可以由用户在想要获取SQLite的执行信息时进行操作触发,本申请实施例对该参数配置指令的触发条件不作限定。该调试类用于提供一组帮助调试代码的方法和属性,上述调用参数即为该调试类中的一个对象的变量。
电子设备接收到参数配置指令后,可以响应于该参数配置指令,加载SQLite的调试类,以便于后续在调试类中查找调用参数,对其进行赋值。
在一种可能实现方式中,上述SQLite的执行信息的获取方法可以应用于不同的操作系统,例如,安卓或IOS操作系统。在此以应用于安卓平台为例进行说明。
该SQLite的执行信息可以通过多种性能调优接口获取得到,相应地,在该配置步骤中配置的调用参数则可以不同。对于上述调试类、性能调优接口和调用参数,该调试类可以为android.database.sqlite.SQLiteDebug类。该性能调优接口为sqlite3_profile接口或sqlite3_trace接口。该性能调优接口为sqlite3_profile接口时,该调用参数为可以DEBUG_SQL_TIME变量。在该性能调优接口为sqlite3_trace接口时,该调用参数可以为DEBUG_SQL_STATEMENTS。当然,该调试类、性能调优接口和调用参数还可以由相关技术人员根据设备的信息进行设置,上述仅为几种示例性说明,本申请实施例对此不作限定。
202、电子设备获取该调试类声明的调用参数。
电子设备加载了调试类后,可以获取到该调试类中声明的各项参数,该调用参数即为其中一种参数。具体地,电子设备可以获取该调试类声明的所有参数,在所有参数中根据该调用参数的名称进行查询,得到该调用参数。
这样获取得到调用参数,即可进行下述步骤203,对调用参数进行赋值,以实现在SQLite被调用时对性能调优接口的调用。
203、电子设备为该调用参数赋值,赋值后的该调用参数用于指示调用该SQLite的性能调优接口。
电子设备获取到调用参数后,可以对其进行赋值,将其设置为指示调用该SQLite的性能调优接口的参数。
例如,以调用参数为android.database.sqlite.SQLiteDebug类中的变量DEBUG_SQL_TIME,该变量(调用参数)默认为否(false),用于指示不调用性能调优接口,电子设备可以对其进行赋值,将其修改为是(true),这样赋值后的变量用于指示调用性能调优接口,在后续SQLite连接时即会调用性能调优接口。
需要说明的是,上述步骤201至步骤203是为性能调优接口的调用参数进行赋值,使得SQLite连接时对性能调优接口进行调用的过程,上述提供了一种可能的赋值方式,该过程还可以采用Java反射的方式或其他方式实现,本申请实施例对此不作限定。
204、电子设备将设备的运行时库中的性能调优接口替换为目标接口。
其中,该运行时库为是一种被编译器用来实现编程语言的内置函数,它可以是提供语言程序运行或执行时支持的一种特殊的计算机程序库。例如,在安卓操作系统中,该运行时库可以为libandroid_runtime.so。
电子设备可以将运行时库中的性能调优接口替换为目标接口,则SQLite连接时,系统框架可以调用该目标接口。例如,以性能调优接口为sqlite3_profile接口为例,可以命名目标接口为my_hooked_sqlite3_profile,将运行时库libandroid_runtime.so中的性能调优接口sqlite3_profile替换为目标接口my_hooked_sqlite3_profile。如果未发生替换,则SQLite连接时,系统框架可以调用性能调优接口。
需要说明的是,该性能调优接口为SQLite本身提供的一种接口,如果直接调用该性能调优接口,这样该性能调优接口会将获取到的SQLite的执行信息发送至系统本身的函数中,该函数依然不会暴露给上层应用,这样依然获取不到该执行信息。因而,通过执行该替换步骤,将调用的接口替换为目标接口,通过一个外部接口调用性能调优接口,并通过下述步骤中的注册回调函数,使得SQLite调用时将获取到的SQLite的执行信息回调给通过该注册的回调函数,进而能够获取到SQLite的执行信息。
具体地,该替换过程可以通过多种方式实现。在一种可能实现方式中,该替换方式可以通过elf hook的方式实现,其中,elf为可执行和可链接格式(Executable andLinkable Format),是一种用于执行档、目的档、共享库和核心转储的标准文件格式。在上述替换过程中,电子设备可以截获elf文件,对其中的数据进行修改。当然,也可以采用其他方式实现替换,本申请实施例对此不作限定。
205、电子设备响应于SQLite连接指令,获取SQLite的性能调优接口的调用参数,该调用参数用于指示调用该SQLite的性能调优接口。
电子设备接收到SQLite连接指令时,可以响应于该SQLite连接指令,获取该性能调优接口的调用参数,以确定是否需要调用该SQLite的性能调优接口。其中,调用参数在上述步骤203中已被赋值,赋值后指示调用该SQLite的性能调优接口,因而,电子设备可以执行下述步骤206。
在一种可能实现方式中,还可以为获取SQLite的执行信息功能提供开启和关闭的功能。上述步骤201至203为开启该功能的过程,开启该功能后,电子设备即可执行步骤204至步骤207,向SQLite注册回调函数,以在后续调用SQLite时获取到SQLite的执行信息。
相应的,电子设备也可以根据对获取SQLite的执行信息功能的关闭指令,关闭该功能。具体的,电子设备可以响应于对获取SQLite的执行信息功能的关闭指令,执行与该步骤201至步骤206同理的步骤,将调用参数设置为调用SQLite,在SQLite连接时,向SQLite注册新的回调函数,该新的回调函数可以为系统内部的函数,或者将步骤206中注册的回调函数删除,从而关闭该执行信息获取功能。
206、电子设备根据该调用参数,调用该目标接口。
由于上述步骤204中,已将运行时库中的性能调优接口替换为目标接口,因而,电子设备获取到该调用参数,即可根据该调用参数,调用目标接口,再通过该目标接口调用性能调优接口。这样可以避免直接调用性能调优接口,将SQLite的执行信息回调给系统内部函数。
207、电子设备通过该目标接口调用该SQLite的性能调优接口,在该SQLite中注册回调函数。
电子设备调用目标接口,可以再通过该目标接口调用性能调优接口。该目标接口中包括有性能调优接口的信息,用于指示对性能调优接口进行调用。
电子设备可以通过目标接口调用该性能调优接口,将回调函数写入该性能调优接口中,完成回调函数的注册,这样该性能调优接口处获取到的SQLite的执行信息则可以回调给通过目标接口注册的回调函数,而不是系统内部的函数。
例如,以性能调用接口为sqlite3_profile接口,命名目标接口为my_hooked_sqlite3_profile为例,可以通过my_hooked_sqlite3_profile调用sqlite3_profile,在sqlite3_profile中注册我们自己的回调函数,例如,可以将我们自己的回调函数命名为mySQLite3Profile。后续通过该回调函数则可以将SQLite的执行信息回调到mySQLite3Profile。
需要说明的是,上述步骤206和步骤207为根据该调用参数,调用该SQLite的性能调优接口,通过该性能调优接口向SQLite注册回调函数的过程,通过增加了目标接口,通过目标接口对性能调优接口进行调用,以注册我们自己的回调函数,而不是直接调用性能调优接口,可以实现将SQLite的执行信息回调给我们自己注册的回调函数,而不是系统内部函数。
需要说明的是,上述步骤201至步骤207为配置过程,电子设备可以仅执行一次,从而配置结束后,电子设备在接收到对SQLite的调用指令时,可以执行下述步骤,来获取SQLite的执行信息。
208、电子设备响应于对SQLite的调用指令,根据SQLite中注册的回调函数,将该SQLite的执行信息回调至该回调函数,得到该SQLite的执行信息。
通过上述步骤201至207,已在SQLite中注册有回调函数,电子设备运行应用程序时,如果需要该SQLite中的文件,或者将文件存储至该SQLite中时,可以调用该SQLite,执行该SQLite中的SQL语句,实现相应的功能。这样电子设备可以获取到对SQLite的调用指令,电子设备可以响应于该调用指令,执行回调步骤,即可将获取得到的SQLite的执行信息回调到该回调函数,这样我们即获取到了该SQLite的执行信息。
具体的,该回调过程可以为:电子设备可以响应于对SQLite的调用指令,获取SQLite的执行信息,根据该SQLite中注册的回调函数,将该SQLite的执行信息回调至该回调函数,从该回调函数中,获取该SQLite的执行信息。
在一种可能实现方式中,电子设备获取到SQLite的执行信息后,还可以将该SQLite的执行信息发送至目标设备,也可以对该SQLite的执行信息进行分析,将符合目标条件的SQLite的执行信息发送至目标设备。
其中,该目标设备用于对SQLite的执行信息进行后续处理。例如,该目标设备可以为监控平台所在设备。电子设备可以将SQLite的执行信息发送给监控平台,监控平台可以对SQLite的执行信息进行分析,或根据该SQLite的执行信息,确定需要优化的SQL语句。
在一个具体的可能实施例中,该SQLite的执行信息包括至少一个结构化查询语言SQL语句和每个SQL语句的执行时长。上述分析并发送符合目标条件的执行信息的过程可以为:电子设备获取该SQLite的执行信息中至少一个SQL语句的执行时长,响应于任一SQL语句的执行时长大于时长阈值,将该SQL语句发送至目标设备。
下面提供一个具体示例,参见图3,本申请提供的方法可以应用于电子设备中,电子设备在应用运行时,可以通过上述步骤208,收集SQLite执行信息,将其发送至监控平台。这样应用本申请提供的方法,能做到统一收集程序中SQLite3的相关运行信息,如执行的SQL语句及其耗时等,实现对这些信息进行监控及分析,如发现慢SQL,从而提高整个移动端产品的质量与体验。
如图4所示,在未实施本申请所提供的方法之前,android框架默认逻辑为:应用创建数据库连接时,判断是否调用sqlite3_profile(性能调优接口),默认为否,而如果是,则会注册回调到Android框架层内部回调函数sqliteProfileCallback。在本申请中,通过利用hook技术,修改Android框架层调用sqlite3_profile,替换sqlite3_profile到钩子方法(my_hooked_sqlite3_profile,也即是目标接口),并注册自己的SQLite执行信息回调函数mySQLiteProfileCallback。
方案实施后的Android框架逻辑则可以为:从而上层应用在调用Android框架接口创建数据库时,就会调用my_hooked_sqlite3_profile(也即是目标接口),进而通过目标接口调用sqlite3_profile,向SQLite3注册执行信息回调函数mySQLite3Profile。这样应用不需要修改原来的任何业务代码,在应用使用数据库时,SQLite执行,SQLite就会通过回调函数把相关执行信息回调给mySQLite3Profile(注册的回调函数)。在获取到执行信息后,还可以利用该执行信息相关的信息,例如,可以将其上报等。
本申请提供的方法,因为是Android框架层的逻辑变动,所以Android上层应用接入时无需要改动,且无需适配。本申请实施例提供的方法的接入成本极低,单进程只需要执行一次方案。该方法无侵入性,即无需修改开发者原有的业务逻辑代码。该方法的通用性好,适用于所有Android应用,而无需做任何适配。该方法的覆盖全面,能够收集应用运行时的所有SQLite的执行信息。
本申请实施例通过将性能调优接口的调用参数设置为调用SQLite的性能调优接口,通过调用性能调优接口,以在SQLite中注册回调函数,这样在SQLite被调用时能够将执行信息回调给该注册的回调函数,无需改变原有的业务逻辑代码就能够获取到执行信息,从而大大减少了代码量,减少了人工成本,有效提高了获取效率。由于不需要改变原有的业务逻辑代码,任一业务逻辑调用SQLite时均能够实现执行信息的获取,通用性好,且不会对业务的稳定性造成影响。
图5是本申请提供的一种获取SQLite的执行信息的装置的结构示意图,参见图5,该装置包括:
获取模块501,用于响应于SQLite连接指令,获取SQLite的性能调优接口的调用参数,该调用参数用于指示调用该SQLite的性能调优接口;
调用模块502,用于根据该调用参数,调用该SQLite的性能调优接口,通过该性能调优接口向SQLite注册回调函数;
该调用模块502,还用于响应于对SQLite的调用指令,根据SQLite中注册的回调函数,将该SQLite的执行信息回调至该回调函数,得到该SQLite的执行信息。
在一种可能实现方式中,该调用模块502用于:
根据该调用参数,调用该目标接口;
通过该目标接口调用该SQLite的性能调优接口,在该SQLite中注册该目标接口对应的回调函数。
在一种可能实现方式中,其特征在于,该装置还包括:
替换模块,用于将设备的运行时库中的性能调优接口替换为该目标接口。
在一种可能实现方式中,该调用模块502用于:
响应于对SQLite的调用指令,获取SQLite的执行信息;
根据该SQLite中注册的回调函数,将该SQLite的执行信息回调至该回调函数;
从该回调函数中,获取该SQLite的执行信息。
在一种可能实现方式中,该装置还包括:
加载模块,用于响应于参数配置指令,加载SQLite的调试类;
该获取模块501,还用于获取该调试类声明的调用参数;
赋值模块,用于为该调用参数赋值,赋值后的该调用参数用于指示调用该SQLite的性能调优接口。
在一种可能实现方式中,该调试类为android.database.sqlite.SQLiteDebug类;
该性能调优接口为sqlite3_profile接口,该调用参数为DEBUG_SQL_TIME变量;或,该性能调优接口为sqlite3_trace接口,该调用参数为DEBUG_SQL_STATEMENTS。
在一种可能实现方式中,该装置还包括发送模块,该发送模块用于执行下述任一项:
将该SQLite的执行信息发送至目标设备;
对该SQLite的执行信息进行分析,将符合目标条件的SQLite的执行信息发送至目标设备。
在一种可能实现方式中,该SQLite的执行信息包括至少一个结构化查询语言SQL语句和每个SQL语句的执行时长;
该发送模块用于:
获取该SQLite的执行信息中至少一个SQL语句的执行时长;
响应于任一SQL语句的执行时长大于时长阈值,将该SQL语句发送至目标设备。
本申请实施例提供的装置,通过将性能调优接口的调用参数设置为调用SQLite的性能调优接口,通过调用性能调优接口,以在SQLite中注册回调函数,这样在SQLite被调用时能够将执行信息回调给该注册的回调函数,无需改变原有的业务逻辑代码就能够获取到执行信息,从而大大减少了代码量,减少了人工成本,有效提高了获取效率。由于不需要改变原有的业务逻辑代码,任一业务逻辑调用SQLite时均能够实现执行信息的获取,通用性好,且不会对业务的稳定性造成影响。
需要说明的是:上述实施例提供的获取SQLite的执行信息的装置在检查内存时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将电子设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的获取SQLite的执行信息的装置与获取SQLite的执行信息的方法实施例属于同一构思,其具体实现过程详见获取SQLite的执行信息的方法实施例,这里不再赘述。
图6是本申请实施例提供的一种终端600的结构示意图,该终端600可以是:智能手机、平板电脑、MP3播放器(Moving Picture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。终端600还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。
通常,终端600包括有:处理器601和存储器602。
处理器601可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器601可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器601也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器601可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器601还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器602可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器602还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器602中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器601所执行以实现本申请中各个实施例提供的获取SQLite的执行信息的方法。
在一些实施例中,终端600还可选包括有:外围设备接口603和至少一个外围设备。处理器601、存储器602和外围设备接口603之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口603相连。具体地,外围设备包括:射频电路604、触摸显示屏605、摄像头组件606、音频电路607、定位组件608和电源606中的至少一种。
外围设备接口603可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器601和存储器602。在一些实施例中,处理器601、存储器602和外围设备接口603被集成在同一芯片或电路板上;在一些其他实施例中,处理器601、存储器602和外围设备接口603中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路604用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路604通过电磁信号与通信网络以及其他通信设备进行通信。射频电路604将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路604包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路604可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:城域网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路604还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请对此不加以限定。
显示屏605用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏605是触摸显示屏时,显示屏605还具有采集在显示屏605的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器601进行处理。此时,显示屏605还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏605可以为一个,设置终端600的前面板;在另一些实施例中,显示屏605可以为至少两个,分别设置在终端600的不同表面或呈折叠设计;在再一些实施例中,显示屏605可以是柔性显示屏,设置在终端600的弯曲表面上或折叠面上。甚至,显示屏605还可以设置成非矩形的不规则图形,也即异形屏。显示屏605可以采用LCD(LiquidCrystal Display,液晶显示屏)、OLED(Organic Light-Emitting Diode,有机发光二极管)等材质制备。
摄像头组件606用于采集图像或视频。可选地,摄像头组件606包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件606还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。
音频电路607可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器601进行处理,或者输入至射频电路604以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在终端600的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器601或射频电路604的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路607还可以包括耳机插孔。
定位组件608用于定位终端600的当前地理位置,以实现导航或LBS(LocationBased Service,基于位置的服务)。定位组件608可以是基于美国的GPS(GlobalPositioning System,全球定位系统)、中国的北斗系统、俄罗斯的格雷纳斯系统或欧盟的伽利略系统的定位组件。
电源606用于为终端600中的各个组件进行供电。电源606可以是交流电、直流电、一次性电池或可充电电池。当电源606包括可充电电池时,该可充电电池可以支持有线充电或无线充电。该可充电电池还可以用于支持快充技术。
在一些实施例中,终端600还包括有一个或多个传感器610。该一个或多个传感器610包括但不限于:加速度传感器611、陀螺仪传感器612、压力传感器613、指纹传感器614、光学传感器615以及接近传感器616。
加速度传感器611可以检测以终端600建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器611可以用于检测重力加速度在三个坐标轴上的分量。处理器601可以根据加速度传感器611采集的重力加速度信号,控制触摸显示屏605以横向视图或纵向视图进行用户界面的显示。加速度传感器611还可以用于游戏或者用户的运动数据的采集。
陀螺仪传感器612可以检测终端600的机体方向及转动角度,陀螺仪传感器612可以与加速度传感器611协同采集用户对终端600的3D动作。处理器601根据陀螺仪传感器612采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变UI)、拍摄时的图像稳定、游戏控制以及惯性导航。
压力传感器613可以设置在终端600的侧边框和/或触摸显示屏605的下层。当压力传感器613设置在终端600的侧边框时,可以检测用户对终端600的握持信号,由处理器601根据压力传感器613采集的握持信号进行左右手识别或快捷操作。当压力传感器613设置在触摸显示屏605的下层时,由处理器601根据用户对触摸显示屏605的压力操作,实现对UI界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
指纹传感器614用于采集用户的指纹,由处理器601根据指纹传感器614采集到的指纹识别用户的身份,或者,由指纹传感器614根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器601授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。指纹传感器614可以被设置终端600的正面、背面或侧面。当终端600上设置有物理按键或厂商Logo时,指纹传感器614可以与物理按键或厂商Logo集成在一起。
光学传感器615用于采集环境光强度。在一个实施例中,处理器601可以根据光学传感器615采集的环境光强度,控制触摸显示屏605的显示亮度。具体地,当环境光强度较高时,调高触摸显示屏605的显示亮度;当环境光强度较低时,调低触摸显示屏605的显示亮度。在另一个实施例中,处理器601还可以根据光学传感器615采集的环境光强度,动态调整摄像头组件606的拍摄参数。
接近传感器616,也称距离传感器,通常设置在终端600的前面板。接近传感器616用于采集用户与终端600的正面之间的距离。在一个实施例中,当接近传感器616检测到用户与终端600的正面之间的距离逐渐变小时,由处理器601控制触摸显示屏605从亮屏状态切换为息屏状态;当接近传感器616检测到用户与终端600的正面之间的距离逐渐变大时,由处理器601控制触摸显示屏605从息屏状态切换为亮屏状态。
本领域技术人员可以理解,图6中示出的结构并不构成对终端600的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
图7是本申请实施例提供的一种服务器的结构示意图,该服务器700可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(Central ProcessingUnits,CPU)701和一个或一个以上的存储器702,其中,该存储器702中存储有至少一条程序代码,该至少一条程序代码由该处理器701加载并执行以实现上述各个实施例提供的获取SQLite的执行信息的方法。当然,该服务器700还可以具有有线或无线网络接口、键盘以及输入输出接口等部件,以便进行输入输出,该服务器700还可以包括其他用于实现设备功能的部件,在此不做赘述。
在示例性实施例中,还提供了一种计算机可读存储介质,例如包括至少一条程序代码的存储器,上述至少一条程序代码可由电子设备中的处理器执行以完成上述实施例中获取SQLite的执行信息的方法。例如,该计算机可读存储介质可以是ROM(Read-OnlyMemory,只读存储器)、RAM(Random-Access Memory,随机存取存储器)、CD-ROM(CompactDisc Read-Only Memory,只读光盘)、磁带、软盘和光数据存储设备等。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,该程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
上述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (15)
1.一种获取SQLite的执行信息的方法,其特征在于,所述方法包括:
响应于SQLite连接指令,获取SQLite的性能调优接口的调用参数,所述调用参数用于指示调用所述SQLite的性能调优接口;
根据所述调用参数,调用所述SQLite的性能调优接口,通过所述性能调优接口向SQLite注册回调函数;
响应于对SQLite的调用指令,根据SQLite中注册的回调函数,将所述SQLite的执行信息回调至所述回调函数,得到所述SQLite的执行信息。
2.根据权利要求1所述的方法,其特征在于,所述根据所述调用参数,调用所述SQLite的性能调优接口,通过所述性能调优接口向SQLite注册回调函数,包括:
根据所述调用参数,调用目标接口;
通过所述目标接口调用所述SQLite的性能调优接口,在所述SQLite中注册所述目标接口对应的回调函数。
3.根据权利要求2所述的方法,其特征在于,所述根据所述调用参数,调用所述SQLite的性能调优接口之前,所述方法还包括:
将设备的运行时库中的性能调优接口替换为所述目标接口。
4.根据权利要求1所述的方法,其特征在于,所述响应于对SQLite的调用指令,根据SQLite中注册的回调函数,将所述SQLite的执行信息回调至所述回调函数,得到所述SQLite的执行信息,包括:
响应于对SQLite的调用指令,获取SQLite的执行信息;
根据所述SQLite中注册的回调函数,将所述SQLite的执行信息回调至所述回调函数;
从所述回调函数中,获取所述SQLite的执行信息。
5.根据权利要求1所述的方法,其特征在于,所述响应于SQLite连接指令,获取SQLite的性能调优接口的调用参数之前,所述方法还包括:
响应于参数配置指令,加载SQLite的调试类;
获取所述调试类声明的调用参数;
为所述调用参数赋值,赋值后的所述调用参数用于指示调用所述SQLite的性能调优接口。
6.根据权利要求5所述的方法,其特征在于,所述调试类为android.database.sqlite.SQLiteDebug类;
所述性能调优接口为sqlite3_profile接口,所述调用参数为DEBUG_SQL_TIME变量;或,所述性能调优接口为sqlite3_trace接口,所述调用参数为DEBUG_SQL_STATEMENTS。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括下述任一项:
将所述SQLite的执行信息发送至目标设备;
对所述SQLite的执行信息进行分析,将符合目标条件的SQLite的执行信息发送至目标设备。
8.根据权利要求7所述的方法,其特征在于,所述SQLite的执行信息包括至少一个结构化查询语言SQL语句和每个SQL语句的执行时长;
所述对所述SQLite的执行信息进行分析,将符合目标条件的SQLite的执行信息发送至目标设备,包括:
获取所述SQLite的执行信息中至少一个SQL语句的执行时长;
响应于任一SQL语句的执行时长大于时长阈值,将所述SQL语句发送至目标设备。
9.一种获取SQLite的执行信息的装置,其特征在于,所述装置包括:
获取模块,用于响应于SQLite连接指令,获取SQLite的性能调优接口的调用参数,所述调用参数用于指示调用所述SQLite的性能调优接口;
调用模块,用于根据所述调用参数,调用所述SQLite的性能调优接口,通过所述性能调优接口向SQLite注册回调函数;
所述调用模块,还用于响应于对SQLite的调用指令,根据SQLite中注册的回调函数,将所述SQLite的执行信息回调至所述回调函数,得到所述SQLite的执行信息。
10.根据权利要求9所述的装置,其特征在于,所述调用模块用于:
根据所述调用参数,调用目标接口;
通过所述目标接口调用所述SQLite的性能调优接口,在所述SQLite中注册所述目标接口对应的回调函数。
11.根据权利要求10所述的装置,其特征在于,所述装置还包括:
替换模块,用于将设备的运行时库中的性能调优接口替换为所述目标接口。
12.根据权利要求9所述的装置,其特征在于,所述调用模块用于:
响应于对SQLite的调用指令,获取SQLite的执行信息;
根据所述SQLite中注册的回调函数,将所述SQLite的执行信息回调至所述回调函数;
从所述回调函数中,获取所述SQLite的执行信息。
13.根据权利要求9所述的装置,其特征在于,所述装置还包括:
加载模块,用于响应于参数配置指令,加载SQLite的调试类;
所述获取模块,还用于获取所述调试类声明的调用参数;
赋值模块,用于为所述调用参数赋值,赋值后的所述调用参数用于指示调用所述SQLite的性能调优接口。
14.一种电子设备,其特征在于,所述电子设备包括一个或多个处理器和一个或多个存储器,所述一个或多个存储器中存储有至少一条程序代码,所述至少一条程序代码由所述一个或多个处理器加载并执行以实现如权利要求1至权利要求8任一项所述的获取SQLite的执行信息的方法所执行的操作。
15.一种存储介质,其特征在于,所述存储介质中存储有至少一条程序代码,所述至少一条程序代码由处理器加载并执行以实现如权利要求1至权利要求8任一项所述的获取SQLite的执行信息的方法所执行的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010171991.5A CN113392120A (zh) | 2020-03-12 | 2020-03-12 | 获取SQLite的执行信息的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010171991.5A CN113392120A (zh) | 2020-03-12 | 2020-03-12 | 获取SQLite的执行信息的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113392120A true CN113392120A (zh) | 2021-09-14 |
Family
ID=77615804
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010171991.5A Pending CN113392120A (zh) | 2020-03-12 | 2020-03-12 | 获取SQLite的执行信息的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113392120A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117113423A (zh) * | 2023-10-24 | 2023-11-24 | 中电科网络安全科技股份有限公司 | 一种数据库透明加密方法、装置、设备及存储介质 |
-
2020
- 2020-03-12 CN CN202010171991.5A patent/CN113392120A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117113423A (zh) * | 2023-10-24 | 2023-11-24 | 中电科网络安全科技股份有限公司 | 一种数据库透明加密方法、装置、设备及存储介质 |
CN117113423B (zh) * | 2023-10-24 | 2024-04-12 | 中电科网络安全科技股份有限公司 | 一种数据库透明加密方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110674022B (zh) | 行为数据获取方法、装置及存储介质 | |
CN110837378B (zh) | 软件开发工具包sdk功能的调用方法及装置 | |
CN111338910B (zh) | 日志数据处理、显示方法、装置、设备及存储介质 | |
CN108132790B (zh) | 检测无用代码的方法、装置及计算机存储介质 | |
CN111752666A (zh) | 窗口显示方法、装置和终端 | |
CN113190362B (zh) | 服务调用方法、装置、计算机设备及存储介质 | |
CN111897525A (zh) | 大数据处理方法及系统 | |
CN111177013A (zh) | 日志数据获取方法、装置、计算机设备及存储介质 | |
CN111737100A (zh) | 数据获取方法、装置、设备及存储介质 | |
CN110515962B (zh) | 缓存数据的方法、装置、电子设备及存储介质 | |
CN114064450A (zh) | 应用程序测试方法、装置、电子设备及存储介质 | |
CN110995842A (zh) | 业务数据下载方法、装置、设备及存储介质 | |
CN111338933A (zh) | 埋点验证方法、装置、设备及存储介质 | |
CN112612539A (zh) | 数据模型卸载方法、装置、电子设备及存储介质 | |
CN112148499A (zh) | 数据上报方法、装置、计算机设备及介质 | |
CN108132817B (zh) | 对象管理方法及装置 | |
CN111258683A (zh) | 检测方法、装置、计算机设备及存储介质 | |
CN110825465A (zh) | 日志数据处理方法、装置、电子设备及存储介质 | |
CN113392120A (zh) | 获取SQLite的执行信息的方法及装置 | |
CN113051015B (zh) | 页面渲染方法、装置、电子设备及存储介质 | |
CN112597417B (zh) | 页面更新方法、装置、电子设备及存储介质 | |
CN113268234A (zh) | 页面生成方法、装置、终端和存储介质 | |
CN113312249A (zh) | 日志数据生成方法、日志数据显示方法及装置 | |
CN112000576A (zh) | 代码数据的检测方法、装置、设备及存储介质 | |
CN112988177A (zh) | 应用安装包的发布、应用程序的运行方法、服务器及终端 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40052786 Country of ref document: HK |
|
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |