收集统计信息的方法、装置、电子设备及可读存储介质与流程

文档序号:19284399发布日期:2019-11-29 23:21阅读:136来源:国知局
本申请涉及数据库
技术领域
:,具体而言,本申请涉及一种收集统计信息的方法、装置、电子设备及计算机可读存储介质。
背景技术
::统计信息描述了一个数据表或索引视图中的某些列的值的分布情况,属于数据库对象。根据统计信息,查询优化器就能评估查询过程中需要读取的行数及结果集情况,同时也能创建高质量的查询计划。在很多实际项目中常常会因为统计信息过期导致系统运行极度缓慢,sqlserver中会对新建的索引列自动创建统计信息,当自动创建统计信息参数设置为on时,没有创建索引的查询列也会被创建统计信息,sqlserver也提供了是否自动更新统计信息的系统参数,但是这种自动更新只有当满足一定阈值或条件时才会被触发。因此,在很多时候过期的统计信息导致了查询操作选择了次优的执行计划,导致性能急剧下降,有时候,过期的统计信息可能比没有统计信息更加糟糕。因此,在数据库自动更新统计信息条件未满足之前,由于统计信息更新不及时而导致的系统性能急剧下降成为了急需解决的问题。目前解决此类问题最常见的做法就是技术人员仅仅对那些被发现统计信息过期的数据表做主动的收集,这样做法其实是治标不治本的,随着时间的推移还是会继续出现统计信息过期的数据表,这样不仅问题没有得到根本性解决,还耗费了人力成本和时间成本。技术实现要素:本申请提供了一种收集统计信息的方法、装置、电子设备及计算机可读存储介质,可以解决在数据库自动更新统计信息条件未满足之前,由于统计信息更新不及时而导致的系统性能急剧下降的问题。所述技术方案如下:第一方面,提供了一种收集统计信息的方法,该方法包括:当监测到数据表发生数据更新时,获取发生数据更新的更新数据量;基于所述更新数据量确定出更新后的数据表的数据总量;基于所述数据总量确定出更新数据量阈值;当所述更新数据量超过所述更新数据量阈值时,收集所述数据表的统计信息。优选地,所述当检测到数据表发生数据更新时,获取发生数据更新的更新数据量的步骤,包括:以预设的监测频率监测所述数据表是否发生数据更新;当检测到数据表发生数据更新时,获取所述数据表对应的行修改计数器的数值,并将所述数值作为发生数据更新的更新数据量。优选地,还包括:当所述更新数据量未超过所述更新数据量阈值时,重复执行所述以预设的监测频率监测所述数据表是否发生数据更新的步骤;当检测到数据表发生数据更新时,获取所述数据表对应的行修改计数器的数值,并将所述数值作为发生数据更新的更新数据量。优选地,所述基于所述数据总量确定出更新数据量阈值的步骤,包括:将所述数据总量与预设的阈值百分比的乘积数值,与预设的阈值基数值相加,得到所述更新数据量阈值。优选地,所述收集所述数据表的统计信息的步骤,包括:采用updatestatisticstablename语句收集所述数据表的统计信息。优选地,所述收集所述数据表的统计信息之后,还包括:将行修改计数器的数值清零。第二方面,提供了一种收集统计信息的装置,该装置包括:监测模块,用于监测数据表发生数据更新;获取模块,用于获取发生数据更新的更新数据量;第一处理模块,用于基于所述更新数据量确定出更新后的数据表的数据总量;第二处理模块,用于基于所述数据总量确定出更新数据量阈值;收集模块,用于当所述更新数据量超过所述更新数据量阈值时,收集所述数据表的统计信息。优选地,所述监测模块具体用于:以预设的监测频率监测所述数据表是否发生数据更新;所述获取模块具体用于:获取所述数据表对应的行修改计数器的数值,并将所述数值作为发生数据更新的更新数据量。优选地,还包括:当所述更新数据量未超过所述更新数据量阈值时,重复执行所述监测模块和所述获取模块。优选地,所述第二处理模块具体用于:将所述数据总量与预设的阈值百分比的乘积数值,与预设的阈值基数值相加,得到所述更新数据量阈值。优选地,所述收集模块具体用于:采用updatestatisticstablename语句收集所述数据表的统计信息。优选地,还包括:清除模块,用于将行修改计数器的数值清零。第三方面,提供了一种电子设备,该电子设备包括:处理器、存储器和总线;所述总线,用于连接所述处理器和所述存储器;所述存储器,用于存储操作指令;所述处理器,用于通过调用所述操作指令,可执行指令使处理器执行如本申请的第一方面所示的收集统计信息的方法对应的操作。第四方面,提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现本申请第一方面所示的收集统计信息的方法。本申请提供的技术方案带来的有益效果是:当监测到数据表发生数据更新时,获取发生数据更新的更新数据量,然后基于所述更新数据量确定出更新后的数据表的数据总量,再基于所述数据总量确定出更新数据量阈值,当所述更新数据量超过所述更新数据量阈值时,收集所述数据表的统计信息。这样,在基于sqlserver内置收集统计信息策略的基础上做了可配置化的扩展,使得用户可以根据自身的业务需求结合具体业务表的更新数据量,通过自定义收集统计信息的阀值百分比计算出更新数据量阀值,进而监测、分析配置表收集统计信息的时机,当更新数据量达到更新数据量阀值时,主动触发对被监测数据表进行统计信息收集,从而实现了对sqlserver数据库统计信息收集策略的补充和加强,使其更能满足日常项目需求,不仅解决了因统计信息过期而导致的系统性能急剧下降的问题,还节省了人力成本和时间成本。附图说明为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。图1为本申请一个实施例提供的一种收集统计信息的方法的流程示意图;图2为本申请另一实施例提供的一种收集统计信息的方法的流程示意图;图3为本申请又一实施例提供的一种收集统计信息的装置的结构示意图;图4为本申请又一实施例提供的一种收集统计信息的电子设备的结构示意图。具体实施方式下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本发明的限制。本
技术领域
:技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。本申请提供的收集统计信息的方法、装置、电子设备和计算机可读存储介质,旨在解决现有技术的如上技术问题。下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。在一个实施例中提供了一种收集统计信息的方法,如图1所示,该方法包括:步骤s101,当监测到数据表发生数据更新时,获取发生数据更新的更新数据量;具体而言,数据表可以是实际的业务数据表,数据表发生数据更新可以包括对表中的数据进行增、删、改操作,每当数据表发生数据时,sqlserver中的sys.sysindexes表中的rowmodctr(rowmodificationcounter,行修改计数器)字段的数值就会累计加一,所以,应用于本发明实施例中,发生数据更新的更新数据量就是rowmodctr字段的数值。在实际应用中,在监测数据表是否发生数据更新之前,技术人员可以预先设置监控配置信息。具体地,技术人员通过对实际业务数据表的分析,确定出需要监测自动更新统计信息的数据表,配置项可以包括数据表的id、阈值百分比、监测频率等。其中,数据库的统计信息收集策略和更新数据量有关,当更新数据量超过了统计信息收集策略中设置的更新数据量阈值时,就会收集统计信息,而阈值百分比就是用于计算更新数据量阈值的。步骤s102,基于更新数据量确定出更新后的数据表的数据总量;步骤s103,基于数据总量确定出更新数据量阈值;在确定了数据表的数据总量后,就可以采用监控配置信息中的阈值百分比来确定出更新数据量阈值了。步骤s104,当更新数据量超过更新数据量阈值时,收集数据表的统计信息。在本发明实施例中,当监测到数据表发生数据更新时,获取发生数据更新的更新数据量,然后基于更新数据量确定出更新后的数据表的数据总量,再基于数据总量确定出更新数据量阈值,当更新数据量超过更新数据量阈值时,收集数据表的统计信息。这样,在基于sqlserver内置收集统计信息策略的基础上做了可配置化的扩展,使得用户可以根据自身的业务需求结合具体业务表的更新数据量,通过自定义收集统计信息的阀值百分比计算出更新数据量阀值,进而监测、分析配置表收集统计信息的时机,当更新数据量达到更新数据量阀值时,主动触发对被监测数据表进行统计信息收集,从而实现了对sqlserver数据库统计信息收集策略的补充和加强,使其更能满足日常项目需求,不仅解决了因统计信息过期而导致的系统性能急剧下降的问题,还节省了人力成本和时间成本。在另一个实施例中提供了一种收集统计信息的方法,如图2所示,该方法包括:步骤s201,当监测到数据表发生数据更新时,获取发生数据更新的更新数据量;具体而言,数据表可以是实际的业务数据表,数据表发生数据更新可以包括对表中的数据进行增、删、改操作,每当数据表发生数据时,sqlserver中的sys.sysindexes表中的rowmodctr(rowmodificationcounter,行修改计数器)字段的数值就会累计加一,所以,应用于本发明实施例中,发生数据更新的更新数据量就是rowmodctr字段的数值。在实际应用中,在监测数据表是否发生数据更新之前,技术人员可以预先设置监控配置信息。具体地,技术人员通过对实际业务数据表的分析,确定出需要监测自动更新统计信息的数据表,配置项可以包括数据表的id、阈值百分比、监测频率等。其中,数据库的统计信息收集策略和更新数据量有关,当更新数据量超过了统计信息收集策略中设置的更新数据量阈值时,就会收集统计信息,而阈值百分比就是用于计算更新数据量阈值的。需要说明的是,本发明实施例可以在监控配置信息中同时设置多个数据表,并针对每个数据表分别设置不同的阈值百分比和监测频率,在本发明实施例中,仅仅以一个数据表进行举例说明。在本发明一种优选实施例中,当检测到数据表发生数据更新时,获取发生数据更新的更新数据量的步骤,包括:以预设的监测频率监测数据表是否发生数据更新;当检测到数据表发生数据更新时,获取数据表对应的行修改计数器的数值,并将数值作为发生数据更新的更新数据量。具体而言,在对数据表进行监测的时候,可以采用预设的监控配置信息中的监测频率,比如,每隔1小时,或3小时等来监测数据表是否发生数据更新,具体可以将上一次检测时rowmodctr字段的数值与当前检测时rowmodctr字段的数值进行比较,如果二者不相同,则可以确定数据表发生了数据更新,然后,将当前检测时rowmodctr字段的数值作为发生数据更新的更新数据量,比如,当前检测时rowmodctr字段的数值为800,那么更新数据量就是800。步骤s202,基于更新数据量确定出更新后的数据表的数据总量;比如,数据表在发生数据更新之前,rowmodctr字段的数值为500,更新数据量为800,那么更新后的数据表的数据总量就是1300了。步骤s203,基于数据总量确定出更新数据量阈值;在确定了数据表的数据总量后,就可以采用监控配置信息中的阈值百分比来确定出更新数据量阈值了。在本发明一种优选实施例中,基于数据总量确定出更新数据量阈值的步骤,包括:将数据总量与预设的阈值百分比的乘积数值,与预设的阈值基数值相加,得到更新数据量阈值。在实际应用中,当数据表中的数据未超过500行时,sqlserver针对该数据表更新统计信息和不更新统计信息几乎是没有区别的,甚至没有统计信息也可以,不会出现性能问题,所以,在本发明实施例中,也采用了500作为阈值基数。具体而言,可以采用如下方式计算出更新数据量阈值:更新数据量阈值=500+阈值百分比*数据总量;比如,预设的阈值百分比为20%,数据总量为1000,那么更新数据量阈值就是700。需要说明的是,500和20%仅仅只是用于举例说明的,在实际应用中,技术人员可以根据需求来设置阈值基数和阈值百分比,本发明实施例对此不作限制。步骤s204,当更新数据量超过更新数据量阈值时,收集数据表的统计信息;比如,预设的阈值百分比为20%,数据总量为10000,那么更新数据量阈值就是2500,而实际的更新数据量为3000,大于更新数据量阈值,因此,收集数据表的统计信息。其中,具体可以采用updatestatisticstablename语句来收集数据表的统计信息。在本发明一种优选实施例中,当更新数据量未超过更新数据量阈值时,重复执行以预设的监测频率监测数据表是否发生数据更新的步骤;当检测到数据表发生数据更新时,获取数据表对应的行修改计数器的数值,并将数值作为发生数据更新的更新数据量;具体而言,当更新数据量未超过更新数据量阈值时,就不需要收集数据表的统计信息了,而是在下一个监测频率时,判断数据表是否发生数据更新,如果是,则基于更新后的数据表来确定是否需要收集统计信息。比如,预设的阈值百分比为20%,数据总量为10000,那么更新数据量阈值就是2500,而当前的更新数据量为2000,那么当前就不需要收集统计信息;在下一个监测频率时,更新数据量为5000,那么数量总量则更新为15000,更新数据量阈值也更新为3500,此时,更新数据量大于更新数据量阈值,因此,需要收集更新后的数据表的统计信息了。步骤s205,将行修改计数器的数值清零。具体而言,当针对数据表收集了一次统计信息后,就可以将数据表对应的行修改计数器(也就是rowmodctr字段)的数值清零,这样就不会对下一次收集统计信息产生干扰了。在本发明实施例中,当监测到数据表发生数据更新时,获取发生数据更新的更新数据量,然后基于更新数据量确定出更新后的数据表的数据总量,再基于数据总量确定出更新数据量阈值,当更新数据量超过更新数据量阈值时,收集数据表的统计信息。这样,在基于sqlserver内置收集统计信息策略的基础上做了可配置化的扩展,使得用户可以根据自身的业务需求结合具体业务表的更新数据量,通过自定义收集统计信息的阀值百分比计算出更新数据量阀值,进而监测、分析配置表收集统计信息的时机,当更新数据量达到更新数据量阀值时,主动触发对被监测数据表进行统计信息收集,从而实现了对sqlserver数据库统计信息收集策略的补充和加强,使其更能满足日常项目需求,不仅解决了因统计信息过期而导致的系统性能急剧下降的问题,还节省了人力成本和时间成本。图3为本申请又一实施例提供的一种收集统计信息的装置的结构示意图,如图3所示,本实施例的装置可以包括:监测模块301,用于监测数据表发生数据更新;获取模块302,用于获取发生数据更新的更新数据量;第一处理模块303,用于基于所述更新数据量确定出更新后的数据表的数据总量;第二处理模块304,用于基于所述数据总量确定出更新数据量阈值;收集模块305,用于当所述更新数据量超过所述更新数据量阈值时,收集所述数据表的统计信息。优选地,所述监测模块具体用于:以预设的监测频率监测所述数据表是否发生数据更新;所述获取模块具体用于:获取所述数据表对应的行修改计数器的数值,并将所述数值作为发生数据更新的更新数据量。优选地,还包括:当所述更新数据量未超过所述更新数据量阈值时,重复执行所述监测模块和所述获取模块。优选地,所述第二处理模块具体用于:将所述数据总量与预设的阈值百分比的乘积数值,与预设的阈值基数值相加,得到所述更新数据量阈值。优选地,所述收集模块具体用于:采用updatestatisticstablename语句收集所述数据表的统计信息。优选地,还包括:清除模块,用于将行修改计数器的数值清零。本实施例的收集统计信息的装置可执行本申请第一个实施例所示的收集统计信息的方法,其实现原理相类似,此处不再赘述。在本发明实施例中,当监测到数据表发生数据更新时,获取发生数据更新的更新数据量,然后基于更新数据量确定出更新后的数据表的数据总量,再基于数据总量确定出更新数据量阈值,当更新数据量超过更新数据量阈值时,收集数据表的统计信息。这样,在基于sqlserver内置收集统计信息策略的基础上做了可配置化的扩展,使得用户可以根据自身的业务需求结合具体业务表的更新数据量,通过自定义收集统计信息的阀值百分比计算出更新数据量阀值,进而监测、分析配置表收集统计信息的时机,当更新数据量达到更新数据量阀值时,主动触发对被监测数据表进行统计信息收集,从而实现了对sqlserver数据库统计信息收集策略的补充和加强,使其更能满足日常项目需求,不仅解决了因统计信息过期而导致的系统性能急剧下降的问题,还节省了人力成本和时间成本。本申请的又一实施例中提供了一种电子设备,该电子设备包括:存储器和处理器;至少一个程序,存储于存储器中,用于被处理器执行时,与现有技术相比可实现:在本发明实施例中,当监测到数据表发生数据更新时,获取发生数据更新的更新数据量,然后基于更新数据量确定出更新后的数据表的数据总量,再基于数据总量确定出更新数据量阈值,当更新数据量超过更新数据量阈值时,收集数据表的统计信息。这样,在基于sqlserver内置收集统计信息策略的基础上做了可配置化的扩展,使得用户可以根据自身的业务需求结合具体业务表的更新数据量,通过自定义收集统计信息的阀值百分比计算出更新数据量阀值,进而监测、分析配置表收集统计信息的时机,当更新数据量达到更新数据量阀值时,主动触发对被监测数据表进行统计信息收集,从而实现了对sqlserver数据库统计信息收集策略的补充和加强,使其更能满足日常项目需求,不仅解决了因统计信息过期而导致的系统性能急剧下降的问题,还节省了人力成本和时间成本。在一个可选实施例中提供了一种电子设备,如图4所示,图4所示的电子设备4000包括:处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。可选地,电子设备4000还可以包括收发器4004。需要说明的是,实际应用中收发器4004不限于一个,该电子设备4000的结构并不构成对本申请实施例的限定。处理器4001可以是cpu,通用处理器,dsp,asic,fpga或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,dsp和微处理器的组合等。总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是pci总线或eisa总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。存储器4003可以是rom或可存储静态信息和指令的其他类型的静态存储设备,ram或者可存储信息和指令的其他类型的动态存储设备,也可以是eeprom、cd-rom或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器4003用于存储执行本申请方案的应用程序代码,并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的应用程序代码,以实现前述任一方法实施例所示的内容。其中,电子设备包括但不限于:移动电话、笔记本电脑、数字广播接收器、pda(个人数字助理)、pad(平板电脑)、pmp(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字tv、台式计算机等等的固定终端。本申请的又一实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,当其在计算机上运行时,使得计算机可以执行前述方法实施例中相应内容。与现有技术相比,在本发明实施例中,当监测到数据表发生数据更新时,获取发生数据更新的更新数据量,然后基于更新数据量确定出更新后的数据表的数据总量,再基于数据总量确定出更新数据量阈值,当更新数据量超过更新数据量阈值时,收集数据表的统计信息。这样,在基于sqlserver内置收集统计信息策略的基础上做了可配置化的扩展,使得用户可以根据自身的业务需求结合具体业务表的更新数据量,通过自定义收集统计信息的阀值百分比计算出更新数据量阀值,进而监测、分析配置表收集统计信息的时机,当更新数据量达到更新数据量阀值时,主动触发对被监测数据表进行统计信息收集,从而实现了对sqlserver数据库统计信息收集策略的补充和加强,使其更能满足日常项目需求,不仅解决了因统计信息过期而导致的系统性能急剧下降的问题,还节省了人力成本和时间成本。应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。以上所述仅是本发明的部分实施方式,应当指出,对于本
技术领域
:的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1