首页 文章 精选 留言 我的

精选列表

搜索[dba],共1759篇文章
优秀的个人博客,低调大师

Oracle DBA 增值 PostgreSQL,Greenplum 学习计划

标签 PostgreSQL , Oracle , Greenplum 背景 去O很大程度上是国家层面的战略考虑,比如斯诺登事件,最近贸易战的“中兴”事件,使得去O成为一个不可不做的事情。 但是去O喊了若干年,并没有真正意义上成为轻松愉快的全民运动,比较大的原因可能是 1、去O的成本 2、去O后的责任方 3、利益 随着云计算的兴起,第2,3点应该可以得到很好的解决(有问题找O转换为有问题找云厂商)。而去O的成本就成为一个比较痛的点,到底需要花多少人力物力可以完成去O,过去基本上都是拍脑袋的,每个项目因人而异。同时大部分的成本又来自于对应用的改造。(因为目标库不具备Oracle兼容性,需要大改) 不过成本的问题,也已经解决,阿里云RDSPG,基于PostgreSQL的Oracle兼容版PPAS,不仅在“功能、性能、可靠性、扩展性”等方面可以满足业务的需

优秀的个人博客,低调大师

有了这个告警系统,DBA提前预警不是难题

摘要:告警功能是各大云平台必不可少的模块,个性化的告警配置,为帮助用户和运维人员及时发现问题发挥着重要作用。 本文分享自华为云社区《GaussDB(DWS) 数据库智能监控系统告警框架上线啦!》,作者:codefulture。 本文将从一下几个方面介绍DMS告警框架: 数据库智能监控系统告警框架的来源 告警框架的实现 告警框架的不足和期望 一、数据库智能监控系统告警框架的简介 告警功能是各大云平台必不可少的模块,包括阿里云、腾讯云,乃至华为云本身都提供了十分丰富的告警功能。个性化的告警配置,为帮助用户和运维人员及时发现问题发挥着重要作用。 数据库智能监控系统(简称DMS)告警框架(以下简称告警框架)用于监控数据仓库的集群信息,且基于8.1.1以上版本的集群进行开发,如果您的集群版本低于8.1.1或没有安装DMS,则不能适用次告警功能。 告警功能是结合产品自身需求、业务需求、客户需求独立进行设计与开发,为了能够让用户更快速的熟悉和使用次功能,告警功能在设计之处也参照了其他平台的使用方式、相关概念,并结合自身情况进行调整,完成了初版的设计与开发。 二、告警框架的实现与使用 1. 告警框架的实现 在说具体实现之前,先了解下告警框架中涉及的相关概念。 告警指标:告警指标是实际监控的内容,如:CPU使用率、磁盘使用率、IO等。 告警策略:告警策略是触发告警的最小单元,每一条策略针对一种告警指标。告警策略分为阈值策略、状态策略等。 告警规则:告警规则是实际监测(任务调度)的最小单元,是告警策略的集合。告警规则包含自默认规则和自定义规则。 默认告警规则:默认规则是系统提供的基础告警项,用户只需根据业务简单的配置,即可收到告警信息。 义告警规则:当默认告警规则不能满足实际需求时,用户可根据自己的实际需求创建自定义告警规则。 规则、告警策略、告警指标三者关系:一个告警规则(默认/自定义)可包含多个告警策略,并且规则中的策略存在不同关系,当前已知策略关系如下: 相互独立(或):策略之间并无实际联系,只要一个策略满足条件则发送告警; 优先级:一般指同一规则下,所有策略监控的指标项相同,但触发的阈值不同,按照阈值递减顺序判断是否发送告警; 与:所有策略都满足条件则发送告警。 了解了以上概念,再来说下告警框架的组成,告警框架主要分为三大部分,监控指标采集、告警策略定制、告警任务调度。 1-1. 监控指标采集 监控数据库,必须要对数据库各指标数据进行采集,通过合理的统计查询,获得实时或周期性的数据库和集群的状态,结合告警策略触发告警。 1-2. 告警策略定制 下图所示是告警策略的组成,通过各配置项的不同组合,达成多样化的配置,后续版本的迭代中,会加入更多的可配置项,以支持更多的业务场景。 1-3. 告警任务调度 监控指标是周而复始的过程,需要一个稳定的调度器支撑告警框架的任务调度,目前采用的是分布式调度框架Quartz。下图所示是调度任务的执行逻辑。 2. 告警框架的使用 DMS告警框架位于【数据仓库服务】中的【告警管理】菜单中。 首页提供了告警统计功能,包含了一周内发生的告警,用户可查看统计数字和告警详细信息。 点击【查看告警规则】查看告警规则列表。 告警框架提供了自定义告警规则和默认告警规则,默认告警规则未系统内置,用户可根绝自身需求添加自定义告警。 点击【创建规则】或【修改】按钮进入配置页面。 目前可修改的内容只有“绑定集群”、“阈值”、“持续周期”、“抑制条件”、“告警级别”,其他选项,将在后续的版本中放开为用户提供更丰富的配置选择。 2-1. 各修改项说明 修改绑定集群可以设置次告警规则适用的集群范围,默认为全部,可多选; 修改阈值可以调整触发告警的上限或下限,每种指标默认提供了阈值范围,可按照页面提示和实际情况进行合理修改。 修改持续周期,可以拉长或缩短指标数据的查询范围,检测的是长周期的指标变化趋势,还是某时刻的指标异常变化。 修改抑制条件可以控制告警的发送频率,处于抑制期的告警不会重复发送。 告警框架的不足与期望 DMS告警框架还在建设当中,存在诸多不足,譬如:还需提供更多的监控指标,支持多种策略配置方式,告警项的拓展不够便捷等。 除了解决上述的痛点,更多的希望告警框架能够和系统的功能模块联动起来,让监控系统更“智能”。 想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技,后台还可获取众多学习资料哦~ 点击关注,第一时间了解华为云新鲜技术~

优秀的个人博客,低调大师

Python实现MySQL DBA小工具一例

我们知道MySQL所有的运行状态统计信息都能从“show global status”语句的结果集中查看,该结果集保存的是从MySQL启动到当前时间之间各状态值的“总数”,对我们的分析不友好。在我们日常维护和优化中,我们需要持续的跟踪某些状态值的的变化(增量或者是平均值);或者是在调整某些参数后,观察某些状态值的变化是否符合我们预期等等。 基于以上这些需求,作者用Python实现了一个小工具。其实也从“MySQL Workbench”这个图形化工具中获得了一点启发,想到做一个命令行下类似的功能。MySQL Workbench中的dashboard中可显示如下图的统计信息,很漂亮哈~ 言归正传,该脚本显示信息的类型分两类:“指定时间内平均值”和“指定时间内增长值”,在命令选项里可指定,首先来看一下命令的帮助信息 其中--average选项为查看指定时间平均值,默认查看指定时间内的增长值;-t选项为想查看的信息类型,每一种信息类型在脚本里对应一个元组(即数组):值为该类型所包含的“状态值”。 这里我本来想做一个比较完美的命令,大家拿来即用,但是应为show status里的状态值太多了,我不用也没必要在脚本里包含所有的。脚本里我只将常用的一些信息包含了进来,并且我更倾向于大家把这个脚本看做是一个易于根据自己情况定制的通用框架(其实就是如果自己关心的信息没有包含在脚本里的话,自己在脚本里添加或修改一个分类即可)。 先看几个例子 查看指定时间内qps: 查看MySQL网络相关状态 OK,看完上面截图觉得这小工具还有点用的,接着看代码,代码中注释还是比较详细的,只要有点编程基础,应该是能看的懂的~~ #!/bin/envpython3 """ bylijiankai20160602 """ fromsysimportexit fromtimeimportsleep fromargparseimportArgumentParser,RawTextHelpFormatter importpymysql #---------- #定义每种显示类型(由-t指定)所包含的状态 #添加和修改要展示的信息修改types_dic字典即可 #同时关注下面add_argument方法添加-t选项时其中choices参数的值,应该和types_dic的键一致 #---------- types_dic={} types_dic['qps']=('Com_select','Com_update','Com_insert','Com_delete','Com_replace','Questions','Queries') types_dic['table_file']=('Opened_tables','Opened_table_definitions','Opened_files','Created_tmp_tables','Created_tmp_disk_tables','Created_tmp_files',) types_dic['general']=('Slow_queries','Select_full_join','Select_full_range_join','Select_range','Select_scan','Sort_range','Sort_rows','Sort_scan') types_dic['threading']=('threads_created') types_dic['networking_stats']=('Bytes_received','Bytes_sent','Connections','Aborted_connects') types_dic['innodb_buffer_pool']=('Innodb_buffer_pool_read_requests','Innodb_buffer_pool_reads','Innodb_buffer_pool_write_requests','Innodb_buffer_pool_wait_free') types_dic['innodb_data']=('Innodb_data_fsyncs','Innodb_data_read','Innodb_data_written') types_dic['innodb_stats']=('Innodb_log_write_requests','Innodb_log_writes','Innodb_os_log_fsyncs','Innodb_os_log_writes') #---------- #get_args()函数通过argparse模块的ArgumentParser类来生成帮助信息并获取命令行参数 #生成一个全局变量字典对象args,保存处理过的命令行参数 #---------- defget_args(): #实例化类,formatter_class参数允许help信息以自定义的格式显示 parser=ArgumentParser(description="ThisisasimpletoolforMySQLDBA.\nWiththistoolyoucanseeseveralkindsofstatus'saverageorincreasevalueinthelastNseconds",formatter_class=RawTextHelpFormatter) #group_necessary=parser.add_argument_group('necessaryarguments') #group_optional=parser.add_argument_group('optionalarguments')#默认既有该项,所有参数均位于该项下 parser.add_argument('-u',metavar='USER',dest='user',help="mysqluser",required=True) parser.add_argument('-p',metavar='PASSWORD',dest='password',help="mysqlpassword",required=True) parser.add_argument('-H',metavar='HOSTNAME',dest='host',help="mysqlhostname",required=True,) parser.add_argument('-P',metavar='PORT',dest='port',help="mysqlport(default3306)",default=3306,type=int) parser.add_argument('-i',metavar='INTERVAL_TIME',dest='interval',help="intervaltime(unit=second,default10s)",default=10,type=int) #--average表示是否查看平均值,默认显示差值action不能和metavar共存 parser.add_argument('--average',dest='average',help='showaveragevalueintheintervaltime(defaultistheincreasevalue)',action='store_true')#store_true不能喝metavar共存 #下面-t选项中的choices的列表值需和脚本开始处定义的types_dic字典的键一致 parser.add_argument('-t',metavar='INFORMATION_TYPE',dest='type',choices=['qps','table_file','general','threading','networking_stats','innodb_buffer_pool','innodb_data','innodb_stats'],help="""informationtype.Seetheallowedtypesbelow: qps:numbersoftheDMLcommandexecuted table_file:tablesortmp_tablesortmp_filesthatareopendorcreated general:somethingaboutselect networking_stats:somethingaboutnetworkorconnect innodb_buffer_pool:somethingaboutinnodb_buffer_poolstats innodb_data:somethingaboutinnodb_datastats innodb_stats:somethingaboutinnodbstats""",\ required=True) #全局字典键(add_argument()中的dest):值(用户输入) #vars将Namespaceobject转换成dictobject globalargs args=vars(parser.parse_args()) #print(args) #---------- #process_query()函数从get_args()返回值中拿到登陆mysql需要的相关信息 #执行showglobalstatus语句,并将结果保存在status_dict字典中 #---------- defprocess_query(): status_dict={}#存放所有status值 try: withpymysql.connect(host=args['host'],user=args['user'],password=args['password'],charset='utf8',port=args['port'])asmysql_cur: mysql_cur.execute('showglobalstatus')#执行语句,查询结果的每一行作为一个元组存进mysql_cur中 exceptpymysql.err.MySQLErroraserr: print("ERROR:"+str(err)) exit(10) forstatusinmysql_cur: status_dict[status[0]]=status[1]#更新status_dict字典 returnstatus_dict #---------- #show_result()函数处理相关数据,展示最终结果 #---------- defshow_result(type): #打印头部 print() forstatusintypes_dic[args['type']]: print('{}'.format(status),end='') print() #开始循环显示 try: whileTrue: status_dic1=process_query() sleep(args['interval']) status_dic2=process_query() #打印各值 forkintypes_dic[args['type']]: ifargs['average']isTrue: #有--average选项,输出指定时间内的平均值 print(''+str(round((int(status_dic2[k])-int(status_dic1[k]))/args['interval'],2)).center(len(k)),end='') else: #输出指定时间内的增长值 print(''+str(round(int(status_dic2[k])-int(status_dic1[k]))).center(len(k)),end='') print() exceptKeyboardInterrupt: print('\n-----bye-----') if__name__=='__main__': get_args() process_query() show_result(args['type']) 最后再啰嗦两句: 1. 关于MySQL show status中的各状态,还是建议小伙伴们仔细阅读下官方文档的解释 2. Python编写命令行工具,用argparse模块来生成帮助信息和处理命令行参数还是很方便的。 奋进的k博客,原文地址:http://kaifly.blog.51cto.com/3209616/1786586 对这篇文章有任何疑惑或建议都欢迎来讨论,一起进步。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册