韶关住房和城乡建设局网站设计师网站1688

web/2025/10/2 10:25:19/文章来源:
韶关住房和城乡建设局网站,设计师网站1688,服饰工厂网站建设,百度推广是什么李博洋 OceanBase 技术部研发工程师。 OceanBase 开源社区里经常会看到一些类似于 “ schema 是什么” 的疑问#xff1a; 很多同学经常会误以为在 OceanBase 里#xff0c;schema 只是 database 的同义词#xff0c;这次分享就从 schema 是什么这个问题稍微展开聊一下。 首…李博洋 OceanBase 技术部研发工程师。 OceanBase 开源社区里经常会看到一些类似于 “ schema 是什么” 的疑问 很多同学经常会误以为在 OceanBase 里schema 只是 database 的同义词这次分享就从 schema 是什么这个问题稍微展开聊一下。 首先说结论schema 这个东西在 MySQL OceanBase 的 MySQL 模式、Oracle OceanBase 的 Oracle 模式、OceanBase 元数据管理模块中的含义不同。 OceanBase MySQL 模式中 schema 的概念 Schema 是 Database 的同义词。SQL 中可以使用 schema 关键字代替 Database 关键字例如使用 CREATE SCHEMA 代替 CREATE DATABASE 等。 OceanBase Oracle 模式中 schema 的概念 在 OceanBase 的 Oracle 模式中schema 是指一个用户所拥有的数据库对象的集合用于权限管理和命名空间隔离我个人把它理解成一个 “用户空间”。schema 对象是指在某个 schema 中的数据库对象例如 schema 中的表、视图、索引等非 schema 对象是指不属于某个 schema 的数据库对象例如用户、角色、表空间等。 用户在创建时会拥有一个缺省的 schema其 schema 名就等于用户名。如果有权限的话用户还可以访问和使用其他的 schema。在访问一个 schema 中的对象时如果没有指明该对象属于哪一个 schema系统就会自动给对象加上缺省的 schema 名称。 如果当前 user 拥有访问或修改其他 schema 对象的权限可以通过 alter session set current_schema other_schema_name ; 切换到其他 schema 中进行各种操作。 OB 元数据管理模块中 schema 的概念 Oceanbase 元数据管理模块里的 schema 泛指一切需要在集群范围内同步的数据库对象元信息包括但不限于 table、database、user 等元信息。此外Oceanbase 的 schema 是多版本的内存中的 schema 信息在集群范围的同步是最终一致的。 schema 里有什么 schema 是什么解释完了在社区里又会看到有人问schema 是元信息那么元信息里包含了哪些东西 上面的回答中其实有个小的疏漏因为各种数据库对象的元数据信息只会受 DDL 的影响“预估行数” 属于不受 DDL 的影响只受 DML 影响的统计信息所以其实并不是表的元信息table schema 中也不会对其进行记录。 元信息里具体包含了哪些东西可以参见 src / share / schema 路径下的代码。例如如果想看 table schema 中记录了哪些 table 的元数据信息看 ob_table_schema.h 中的 ObTableSchema 及其父类有哪些类成员即可。 DDL 执行过程 上面回答了 schema 是什么、有什么的问题。因为 schema 只会通过 DDL 进行修改所以这里简单提一下 DDL 的执行过程方便大家在遇到 DDL 相关问题时进行排查。 DDL 不会被优化器处理而是作为 command 发送到 RootServer由 RootServer下简称 rs 进行处理。在 OceanBase 里的执行流程如下 以一个最常见的建表语句为例 create table 命令会在 obs 上对建表语句进行 resolve把建表的信息存到 create_table_arg 中把 create_table_arg 发 rpc 给 rs rs 接下来会来执行如下操作 检查 obs 在 resolve 时使用的的 schema 版本是否最新采用乐观锁的方法解决如果非最新则对这条 DDL 进行整体重试 从 __all_sys_stat 里获取一个租户内单调递增的新 table id  把 create_table_arg 里提供的信息插入到 __all_table_history 等内部表里用于持久化 在 __all_ddl_operation 中记录 ddl 的变更日志用于增量刷新等场景 publish schema通知各节点把 schema 刷到内存里 其他 observer 接收到 RS 发送的 publish schema 的命令之后就会把内部表中的改动增量加载到内存 schema cache 中这也就是我们经常听到别人说的 “刷 schema ”。 rs 上的 ddl_service 调用 publish_schema () 将新的 schema 版本号广播给所有 obs 实际发生了什么 rs 自己所在的 obs 直接调用 refresh_schema 。 给每个 alive obs 发送 switch_schema 的命令参数为最新 schema_version 。 各个 obs 收到指令后生成一个 ObSchemaRefreshTask 异步刷新任务通过这行这个任务把自己的 schema 刷到最新。 附另一张图 图中上面的部分是在执行 DDLRS 的 DDL service 服务会负责写内部表和通知各 observer 节点把元数据的修改加载到内存的 schema cache 中 下面的部分是在执行 query 的过程过程中几乎都会读取内存中 schema cache 的元信息。 一开始客户在社区里提的那个问题中的 GV$OB_SERVER_SCHEMA_INFO 可以理解为每台 ObServer 每个租户已经刷新的最新版本的 schema 的信息这个视图用户比较关注的 schema 信息是 REFRESHED_SCHEMA_VERSION 、SCHEMA_COUNT 、SCHEMA_SIZE 其含义如下 REFRESHED_SCHEMA_VERSION 对应租户在对应机器已刷新到的 schema 版本。 RECEIVED_SCHEMA_VERSION 对应租户在对应机器已已经接收到的 RS 发过来的最新刷新任务的 schema 版本。 SCHEMA_COUNT 对应 schema 版本下各 schema 对象数目的总和 table 数目 database 数目 …。 SCHEMA_SIZE 对应 schema 版本下各 schema 对象总共所占的内存大小( B )。 obclient select * from oceanbase.GV$OB_SERVER_SCHEMA_INFO\G*************************** 1. row *************************** SVR_IP: 11.158.31.20 SVR_PORT: 22602 TENANT_ID: 1002 REFRESHED_SCHEMA_VERSION: 1690109029768968 RECEIVED_SCHEMA_VERSION: 1690113309637344 SCHEMA_COUNT: 1583 SCHEMA_SIZE: 1537240MIN_SSTABLE_SCHEMA_VERSION: -11 row in set (0.01 sec) DDL 和 schema 的问题排查方法 既然都说了这么多那就再说下 DDL 和 schema 比较常见的几类问题。这一部分欢迎大家补充更好的排查问题方法。 执行 DDL 语法报错了我该怎么改语法呢 客户经常会在试着自己把正在用的数据库上的元数据往 OceanBase 开源版本上倒腾比如前几天见到一个客户希望把 pg 里的分区表定义放到 OceanBase MySQL 模式的租户下执行下但是报错了然后就会认为 OceanBase 不支持分区表。 CREATE TABLE value_stream_dashboard_counts ( id bigint NOT NULL, namespace_id bigint NOT NULL, count bigint NOT NULL, metric smallint NOT NULL)PARTITION BY RANGE (id); 我们遇到这种问题应该怎么查 OceanBase MySQL 模式下的对应语法呢大家一般可能会去查各种各样的 OceanBase 语法文档但是 OceanBase 语法随着兼容性的逐步完善而日新月异文档内容其实没办法保证和真实支持的语法强一致甚至连最终一致都不能保证。想起师兄和我说的一句话“文档很喜欢骗人但是代码从不会说谎”OceanBase 社区版支持的所有语法其实都写在一个叫 sql_parser_mysql_mode.y 的 yacc 文件里。 看完这个文件里的语法规则我们就很容易把上面那条 SQL 改成 OceanBase MySQL 模式下可以执行成功的 SQL 。 ​​​​​​​ CREATE TABLE value_stream_dashboard_counts ( id bigint NOT NULL, namespace_id bigint NOT NULL, count bigint NOT NULL, metric smallint NOT NULL)PARTITION BY RANGE (id)( PARTITION p0 VALUES LESS THAN (100), PARTITION p1 VALUES LESS THAN (200), PARTITION p2 VALUES LESS THAN (300), PARTITION p3 VALUES LESS THAN MAXVALUE); 执行 DDL 报了不太明确的错我该怎么排查失败原因呢 比如我执行了一条 DDL它报错了报错说我的 check 约束里出现了不允许被包含在 check 约束里的表达式但具体是什么表达式不被允许是 c1是 是 sysdate()还是 c1 sysdate() ​​​​​​​ obclient create table t1(c1 int, check (c1 sysdate()));ERROR 3814 (HY000): An expression of a check constraint contains disallowed function. 先查一下报错语句的 trace_id 。 ​​​​​​​ select last_trace_id();------------------------------------| last_trace_id() |------------------------------------| Y584A0B9E1F14-00060127094761A8-0-0 |------------------------------------1 row in set (0.00 sec) 那我们就通过 grep Y584A0B9E1F14-00060127094761B0-0-0 observer.log* 去捞下 observer 的日志。 这个 trace 对应的第一条 warning 日志说 deterministic expr is wrongly specified in CHECK constraint这条日志其实写的不对本意应该是 not deterministic expr is wrongly specified in CHECK constraint 大概意思就是说 check 约束里面有个非确定性的表达式这个是不被允许的。 那么究竟什么表达式是非确定性的表达式呢这个就需要根据日志里给出的文件和行号 ob_raw_expr_util.cpp:1856 去看一眼代码了在网页上可以直接跳到具体某个函数的定义里例如 ObRawExpr::is_non_pure_sys_func_expr 。 这里列出了所有 not deterministic 的表达式其中就包含我们用到的 sysdate 。 所以我们就可以大概知道 check 约束里的表达式需要保证多次执行都能得到同样的结果吧。像 sysdate 这种输出当前时间的表达式在多个不同的时间执行多次结果必定是不一样的所以不允许出现在 check 约束里。这里我们还可以趁机了解下还有哪些表达式属于 not deterministic 的。 执行 DDL 捞不到有用的日志怎么办 例如我执行了一个创建 database 的 DDL结果报错了。 ​​​​​​​ obclient create database xiaofeng_db;ERROR 4016 (HY000): Internal errorobclient select last_trace_id();------------------------------------| last_trace_id() |------------------------------------| Y584A0B9E1F14-00060127094761B4-0-0 |------------------------------------1 row in set (0.00 sec) 拿着 trace id 捞日志grep Y584A0B9E1F14-00060127094761B4-0-0 observer.log*结果是 rpc error 。 回忆一下刚才说的 DDL 执行过程DDL arg 会发到 RS 上执行所以这种情况大概率是在 RS 上执行的时候出了什么幺蛾子所以我们还需要通过 grep Y584A0B9E1F14-00060127094761B4-0-0 rootservice.log* | vi - 继续 grep 以下 RS 的日志然后在日志文件里根据错误码 -4016 搜下 ret-4016  最早出现的地方。 然后我们就可以发现日志里说是在 ob_root_service.cpp 文件的 2887 行报的错报错原因是create_database failed, because db_name is forbidden 。这种问题大家先自己根据报错日志里的文件和行号简单分析下原因如果还是没头绪的话再找 OceanBase 的技术支持同学协助分析。 翻一下这个文件哦原来是是我为了构造在 RS 报错的场景故意在这里加了一个报错的错误码说只要 create database 的 database_name 叫 xiaofeng_db 就报错 4016 OB_ERR_UNEXPECTED 。 排查 DDL 和 schema 的问题时忽略 rootservice.log 日志是很常见的情况曾经亲眼见过很多非常有经验的 OceanBase 内核研发专家不止一次因为这个问题浪费大量时间排查简单一个的小 bug。大家切记这类问题在 observer.log 没线索时还要去看下 rootservice.log。 刷 schema hang 住了怎么办 刷 schema hang 住是因为在把内部表的数据加载到内存中的过程中会进行一些 schema 的合法性校验如果校验失败就说明持久化在内部表里的元数据信息出问题了这时 observer 就会 hang 住什么都干不了。因为一旦元数据都错了基于错误的元数据无论是执行 DDL、DML还是执行查询 query 都是错上加错很容易产生大量正确性问题。这种情况出现的概率极低但问题十分严重。 如果执行 DDL hang 住了并且在 RS 的日志里出现类似于“ Trying so hard to die ” 和 “ schema meta is still not consistent after rebuild ,  need fixing ” 的信息表明恢复环境需要人工接入去修改 OceanBase 内部表中的错误信息风险较高建议及时找 OceanBase 的技术支持同学帮忙排查问题根因及协助你恢复环境。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/85569.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安徽网站建设公司哪家好网站域名价值查询

1、data指令 基本语法: date : 显示当前时间date %Y : 显示当前年份date %m : 显示当前月份date %d : 显示当前哪一天date “%Y-%m-%d %H:%M:%S" : 显示年月日时分秒date -s 字符串时间 : 设置系统时…

南京电商网站设计公司wordpress自定义post

三菱PLC应用[集锦] 如何判断用PNP还是NPN的个人工作心得 10~30VDC接近开关与PLC连接时,如何判断用PNP还是NPN的个人工作心得: 对于PLC的开关量输入回路。我个人感觉日本三菱的要好得多,甚至比西门子等赫赫大名的PLC都要实用和可靠&#xff01…

苏州建网站的公司哪家公司好电子商务营销策略分析

摘要:开源技术的学习和采用确实存在着一定门槛,然而学习各种开源项目已经成为许多开发者不可回避的工作内容。那么,对于类似OpenStack的大型开源项目,开发者该如何着手,这里我们看章宇的分享。 【编者按】在 上一届O…

网站开发设计实训总结网页设计与制作教程电商

Codrops 分享了一些给SVG元素加上弹性动画的灵感。实现的思路是把一个SVG元素整合成一个组件,然后从一个路径弹性动画到另一个。这种效果可以应用到像菜单,按钮或其它元素,使得交互更有趣,看起更原生与自然的感觉。 在线演示 …

中英文网站栏目修改清华紫光网站建设

问题背景 在软件开发过程中,本地环境与服务器环境之间的差异可能导致意外的运行时错误。本文将探讨一个常见的问题:在本地环境中使用 Gson 库解析 JSON 数据时日期字段正常解析,但部署到 Linux 服务器上时却出现 JsonSyntaxException 错误。…

揭阳建站服务软件界面设计方案

vee-validate 是为 Vue.js 量身打造的表单校验框架,允许您校验输入的内容并显示对应的错误提示信息。它内置了很多常见的校验规则,可以组合使用多种校验规则,大部分场景只需要配置就能实现开箱即用,还支持自定义正则表达式。而且支…

大方泳嘉网站建设网站关于我们页面设计

提出了一种基于人工智能深度强化学习算法的扩展性及智能性较高的智能选择模式。在人工智能深度强化学习 算法的基础上,引入了动作抑制、四重 Q 学习 (QQL) 及归一化 Q-value 等机制,研究并实现了在满足业务延迟要求及公平 性的原则下,物联终端…

网站自定义功能实现网站建设内部问卷

随着科技的发展和消费者习惯的变化,OTT大屏营销正逐渐成为客厅经济的新风向。OTT不仅改变了人们获取信息和娱乐的方式,也为品牌营销提供了新的机遇和挑战,OTT大屏营销已经成为客厅经济的重要组成部分。酷开科技通过其自主研发的智能电视操作系…

中山网站建设联系电话简洁企业网站

添加用户(为sam用户添加一个主目录/home/sam) useradd -d /home/sam -m sam新建一个用户gem,该用户的登录shell是/bin/sh,它属于group用户组,同时又属于adm和root用户组,其中group用户组是其主组 添加用户账号就是在/etc/passwd文件中为新用户添加一条记…

涿州住房和城乡建设局网站手机app界面设计分析

通过之前的了解,我们都知道光端机有很多不同的分类,在这其中就有PDH光端机和SDH光端机,那么,PDH光端机和SDH光端机有什么区别?SDH光端机较PDH光端机相比有什么优势呢?接下来就由飞畅科技小编来为大家详细介…

网站做动态图片大全网站如何在百度做排名

本文实例讲述了php实现用手机关闭计算机(电脑)的方法。分享给大家供大家参考。具体分析如下:适合有手机和电脑,用wifi的php web开发。方便关闭你的电脑(尤其在你想睡觉时 ),适合局域网用法:放在你的web项目文件夹,可以…

网站的创新点有哪些wordpress注册页面

赵 谦 1,祖 群 1,齐 亮 2,胡永杰 2,孙雪坤3,陈 阳 1(1. 中材科技股份有限公司,中国南京 210012;2. 美国密歇根大学,美国密歇根州安娜堡 48109-236; 3. 美国大陆地科技…

做兼职打字员的网站陕西省建设网站 五大员过期

问题: word中编号和文本间距过大 解决办法: 在正文中,调整列表缩进——更多——编号之后——设置为“空格”。 如果经过1步骤后,正文中的编号和后面的问题间距过大,可以执行, 段落——缩进——左侧——设置为0——缩进…

饰品企业网站建设赣榆城乡建设局网站

工具类如下 打包下载方法:exportZip(支持整个文件夹或单文件一起) 注意:前端发送请求不能用ajax,form表单提交可以,location.href也可以,window.open也可以,总之就ajax请求就是不行 import com.…

做短视频网站收益青岛seo百科

来让我们开始第一个游戏的制作。 这个过程可能有点艰辛,但是只要坚持下来,第一个游戏往往能给我们带来巨大的收益(当然这个收益不是经济上的:-P) 先上截图: iPad中: 游戏构思 角色 在屏幕的上方,有一定数量…

免费的网站程序哪里好1号网站建设 高端网站建设

腾讯云4核8G服务器多少钱?腾讯云4核8G轻量应用服务器12M带宽租用价格646元15个月,活动页面 txybk.com/go/txy 活动链接打开如下图所示: 腾讯云4核8G服务器优惠价格 这台4核8G服务器是轻量应用服务器,详细配置为:轻量4核…

合肥企业网站营销电话wordpress 友情链接页

集合我们高中都学过吧? 最重要的几个特点:元素不能重复、各个元素之间没有关系、没有顺序 集合内的元素可以是单元素或者是集合。 对集合的操作:交集并集差集等,还有对自身的加减等。 需要频繁的加减元素,所以顺序…

九江网站推广重庆模板建站哪家好

题目描述 输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n 10; n! 3628800,所以答案为2输入描述: 输入为一行,n(1 ≤ n ≤ 1000) 输出描述: 输出一个整数,即题目所求 示例1输入 10 输出 2 思路:要统计末尾0的个数,只需要统…

网站上传都传些什么文件网站建设启动资金预算

一、EL表达式 1.1.特点 是一个由java开发的工具包 用于从特定域对象中读取并写入到响应体开发任务,不能向域对象中写入。 EL工具包自动存在Tomcat的lib中(el-api.jar),开发是可以直接使用,无需其他额外的包。 标准…

合肥市建设工程市场信息价网站河南企业网站营销设计

原文:http://www.cnblogs.com/fjdingsd/p/5273008.html 本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别。 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性&#xff1…