京东网站建设流程图,对网站开发课程的建议,在大学里网站建设属于什么专业,asp网站显示空白系统监控视图#xff1a;系统视图
OceanBase 数据库为多租户架构#xff0c;租户分为两种类型#xff1a;普通租户以及 sys 租户。OceanBase 数据库系统表都存储在 sys 租户#xff0c;且主键中存储租户号#xff08;tenant_id#xff09;#xff0c;区分每个租户的内容…系统监控视图系统视图
OceanBase 数据库为多租户架构租户分为两种类型普通租户以及 sys 租户。OceanBase 数据库系统表都存储在 sys 租户且主键中存储租户号tenant_id区分每个租户的内容。每个租户内部创建一个该租户数据的只读视图
租户类型包含系统表类别SYS租户 核心表 分表位置信息表 模式及用户权限表 DDL 操作相关的表 系统配置相关的表 系统变量及系统状态相关的表 Zone 和服务器等部署相关的系统表 租户、Resource Pool、Unit 相关的系统表普通租户以 __tenant 作为表名前缀的只读视图表示租户内信息其它系统表的视图
状态查询SQL
SQL说明注意事项SELECT * FROM __all_zone查看zone状态 is_merge_error对应的value是否是0 status是否全为ACTIVE SELECT ZONE, SVR_IP, STATUS,STOP_TIME FROM __all_server;查看OBServer状态 status,stop_time 两个字段来标识 OBserver 的状态 stop_time为0时表示OBServer为started状态 不为0时表示OBServer处于stopped状态 status为active时表示OBServer处于正常状态 为inactive时表示OBServer处于下线状态为 deleting时表示OBServer正在被删除
磁盘空间查询SQL
SQL说明注意事项SELECT * FROM __all_zone;查看Zone状态 is_merge_error对应的value是否是0 status 是否全为ACTIVE SELECT ZONE,SVR_IP,STATUS,STOP_TIME FROM __all_server;查看OBServer状态 status,stop_time 两个字段来标识 OBserver 的状态 stop_time为0时表示OBServer为started状态不为0时表示OBServer处于stopped状态status为active时表示OBServer处于正常状态为inactive时表示OBServer处于下线状态为deleting时表示OBServer正在被删除
磁盘空间查询SQL
SQL说明注意事项 select total_size,used_size,free_size svr_ip from __all_virtual_disk_stat; 查询 OceanBase 集群中各 OBServer 的磁盘容量和已使用量 free_size 一般大于800G根据实际机器配置会有区别。如果所有server都小于此值说明集群存储空间不够应考虑集群扩容 select tenant_id, svr_ip, unit_id, table_id, sum(data_size) /1024/1024/1024 size_G from __all_virtual_meta_table group by 1, 2, 3, 4;记录了副本信息可按租户表统计磁盘空间使用如果租户某unit磁盘空间占用过大(比如4TB)应考虑增加租户unit。如果单表磁盘空间占用过大 (比如200GB)应考虑对表进行分区。只包含 SSTable磁盘空间不含memTable内存中数据历史事件查询SQL
__all_rootservice_event_history和__all_server_event_history分别记录集群级别和OBServer级别的历史事件。可以通过这两张表查询不同事件的信息下表以查看转储事件为例 SQL说明注意事项select* from __all_rootservice_event_history WHERE event LIKE ‘%minor%’ORDER BY gmt_create DESC LIMIT 10; 系统租户从 RootService 角度查看最近10次的转储记录 __all_rootservice_event_history记录集群级事件如major freeze, 合并server 上下线修改primary_zone引发的切主 操作、负载均衡任务执行等保留 7 天内的数据 SELECT * FROM __all_server_event_history WHERE svr_ip192.168.100.1 AND module IN (freeze, minor_merge) ORDER BY gmt_create DESC LIMIT 10;系统租户查看具体某台OBServer 的转储情况 __all_server_event_history 记录server级事件如转储用户发起的系统命令保留 2 天内的数据
机器剩余资源查询SQL
select b.zone, a.svr_ip, a.cpu_total, a.cpu_assigned cpu_ass, a.cpu_assigned_percent
cpu_ass_percent,round(a.mem_total/1024/1024/1024, 2) as mem_total,
round(a.mem_assigned/1024/1024/1024, 2) mem_ass,round((a.mem_totala.mem_assigned)/1024/1024/1024, 2) as mem_free,a.mem_assigned_percent mem_ass_percent
from __all_virtual_server_stat a,__all_server b where a.svr_ip b.svr_ip order by zone,cpu_assigned_percent desc;select zone,
concat(svr_ip, :, svr_port) observer,
cpu_capacity,
cpu_total,
cpu_assigned,
cpu_assigned_percent,
mem_capacity/(1024*1024*1024) mem_capacity,
mem_total/(1024*1024*1024) mem_total,
mem_assigned/(1024*1024*1024) mem_assigned,
mem_assigned_percent,
unit_Num,
round(load, 2) load,
round(cpu_weight, 2) cpu_weight,
round(memory_weight, 2) mem_weight,
leader_count
from __all_virtual_server_stat
order by zone, svr_ip;如果某个zone中所有server的某项指标(cpu_ass_percent, mem_ass_percent) 都比较高(90)后续加租户或扩租户资源可能会因资源不够失败可考虑集群扩容
系统性能视图gv$memory
gv$memory展示当前租户在所有OBServer上各个模块的内存使用情况基于__all_virtual_memory_info创建
字段名称类型说明CONTEXTvarchar(256)内存所属Mod名称COUNTbigint(20)当前该 Mod 使用中的内存单元个数USEDbigint(20)Mod当前使用的内存数值单位ByteALLOC_COUNTbigint(20)该Mod申请的内存总个数FREE_COUNTbigint(20)该Mod释放的内存总个数
系统性能视图gv$memstore
gv$memstore展示所有服务器上所有租户的MEMTable的内存使用状况以__all_virtual_tenant_memstore_info创建
select * from gv$memstore;
字段名称类型说明ACTIVEbigint(20)当前活跃的MEMTable的内存占用大小TOTALbigint(20) 当前该 Mod 使用中的内存单元个数,包括 active frozen memstoreByte FREEZE_TRIGGERbigint(20)触发 MEMTable 冻结的内存大小ByteMEM_LIMITbigint(20)MEMTable 的内存大小限制ByteFREEZE_CNTbigint(20)MEMTable 的冻结次数
系统性能视图gv$sql_audit
gv$sql_audit视图用于展示所有 Server 上每一次 SQL 请求的来源、执行状态等统计信息。该视图是按照租户拆分的除了系统租户其他租户不能跨租户查询
检查特定租户下Top 10的sql执行时间
select sql_id, query_sql,count(*), avg(elapsed_time), avg(execute_time), avg(queue_time), avg(user_io_wait_time)
from gv$sql_audit where tenant_id1002 group by sql_id
having count(*)1 order by 5 desc limit 10\G检查特定租户下消耗cpu最多的top sql:
select sql_id, avg(execute_time) avg_exec_time, count(*) cnt,
avg(execute_time-TOTAL_WAIT_TIME_MICRO) cpu_time
from gv$sql_audit where tenant_id1002
group by 1 order by avg_exec_time * cnt desc limit 5;系统性能视图gv$sql
gv$sql用于记录所有热更新的 SQL 相关统计信息记录每个 Plan 上的统计信息汇总单个 Plan 多次执行的统计信息每个 Plan 都会在表中有一行。下表对gv$sql部分字段进行简单归类
字段类别详细说明用于定位SQL的字段 [CON_ID : 租户 ID] [SVR_IP : IP 地址] [SVR_PORT : 端口号] [PLAN_ID : 执行计划的 ID] [SQL_ID : SQL 的标识符] [TYPE : SQL 类型local remote distribute] [SQL_TEXT : SQL 语句文本] [PLAN_HASH_VALUE :执行计划的 Hash 值] SQL执行时间类统计字段[FIRST_LOAD_TIME : 第一次执行时间] [LAST_ACTIVE_TIME : 上一次执行时间][AVG_EXE_USEC : 平均执行耗时] [SLOWEST_EXE_TIME : 最慢执行开始时间点][SLOWEST_EXE_USEC :最慢执行消耗时间] [SLOW_COUNT :慢查询次数统计]SQL执行效率类统计字段 [HIT_COUNT : 命中 Plan Cache 的统计] [PLAN_SIZE : 物理计划占用的内存][EXECUTIONS : 执行次数] [DISK_READS : 读盘次数] [DIRECT_WRITES : 写盘次数] [BUFFER_GETS : 逻辑读次数] [ELAPSED_TIME : 完成总消耗时间] [CPU_TIME : 消耗的 CPU 时间]
系统性能视图gv$plan_cache_plan_statgv$plan_cache_plan_stat 视图详细记录了当前租户在所有 Server 上的计划缓存中缓存的每一个缓存对象的状态。该表不仅缓存了 SQL 计划对象也缓存了PL对象如匿名块、PL Package 以及 PL Function某些字段只在特定对象下有效
gv$plan_cache_plan_stat记录的信息与gv$sql视图相似但更加丰富下表列出一些多出的字段 字段名称 类型 说明 LARGE_QUERYS bigint(20) 被判断为大查询的次数 DELAYED_LARGE_QUERYS bigint(20) 被判断为大查询且被丢入大查询队列的次数 DELAYED_PX_QUERYS bigint(20) 并行查询被丢回队列重试的次数 OUTLINE_ID bigint(20) Outline 的 ID为 -1 表示不是通过绑定 Outline 生成的计划 OUTLINE_DATA bigint(20) 计划对应的 Outline 信息 TABLE_SCAN bigint(20) 表示该查询是否为主键扫描 TIMEOUT_COUNT bigint(20) 超时的次数
系统性能视图gv$plan_cache_plan_explain
gv$plan_cache_plan_explain视图用于展示缓存在全部的 Server 中的计划缓存中的物理执行计划。
该视图仅支持 get 操作查询时需要指定 IP、PORT、TENANT_ID、PLAN_ID 字段
select * from gv$plan_cache_plan_stat limit 5\G;
性能监控常规监测
性能问题应优先通过OCP 管理员入口 集群入口 性能 监控 数据趋势中查看QPS_RT, TPS_RT大致定位出问题时间点 性能监控捞取慢SQL
OceanBase中执行时间超过 trace_log_slow_query_watermark (系统参数)的sql在 OBServer日志中都会打slow query消息
在 OBServer 日志中查找慢 SQL 消息
fgrep [slow query] observer.log |sed -e s/|/\n/g | more --查看日志中所有的 slow query
grep trace_id observer.log |sed -e s/|/\n/g | more ---根据trace_id 查询某个 slow query
参数说明默认值trace_log_query_watermark设置查询的执行时间阈值如果查询的执行时间超过该阈值则被认为是慢查询100ms
性能监控捞取慢SQL
[process begin] [query begin] 等方框号内的名称是指SQL执行经过的每一个内部模块
trace_id与gv$sql_audit里的trace_id字段对应\
stmt是指执行的SQL
u代表每一步消耗的时间单位是微秒
total_timeu是指整个过程消耗的总时间 性能监控捞取慢SQL
OceanBase提供两张虚拟表 v$sql_audit , gv$sql_audit记录最近一段时间sql执行历史
v$sql_audit 存储本机的sql执行历史 gv$sql_audit存储整个集群的sql执行历史
查询v$sql_audit表如查询某租户执行时间大于1s的SQL
select * from v$sql_audit where tenant_id tenant id
and elapsed_time 1000000 limit 10;查询SQL执行时间按秒分布的直方图
select round(elapsed_time/1000000), count(*) from v$sql_audit
where tenant_id tenant_id group by 1;性能监控捞取慢SQL
OBProxy有自己的慢查询日志打印功能通过设置OBProxy的配置项控制打印到日志中的SQL或事务的处理时间阈值根据实际需求修改OBProxy配置项
ALTER PROXYCONFIG SET slow_transaction_time_threshold100ms;
ALTER PROXYCONFIG SET slow_proxy_process_time_threshold5ms;参数说明默认值slow_transaction_time_threshold指慢查询或事务的整个生命周期的s时间阈值超过了该时间就会打印相关日志5sslow_proxy_process_time_threshold在发往 Server 前 Proxy 本身的处理时间包括获取集群信息、路由信息、黑名单信息等2msslow_query_time_threshold指从OBProxy获取 SQL直到返回给客户端之前的这段时间的阈值超过了该时间也会打印相关日志500ms
OBProxy慢查询举例 修复慢SQL
创建索引当慢SQL因无合适索引可用时导致时可创建索引
outline绑定如慢SQL由OceanBase优化器选择了不够优的执行计划导致可通过outline绑定执行计划。有两种方式创建outline
通过 SQL_TEXT创建用户执行的带参数的原始语句
通过 SQL_ID 创建
CREATE [OR REPLACE] OUTLINE outline_name ON stmt [TO target_stmt]; //SQL_TEXT方式
CREATE OUTLINE outline_name ON sql_id USING HINT hint; //SQL_ID方式