DBLINK HINT /*+ driving_site(org) */ 优化策略和思路

使用DBLINK远程访问数据库的优化策略和思路:

策略:远程访问,网络传输占很大部分,优化原则,减少网络传输,将小的结果集拉到本地处理;

思路1:在远端建立视图;

思路2:使用DRIVING_SITE将数据拉到本地处理;



出现这种执行计划,主要原因是使用了db link,要想看到执行计划,可以加 hint,如: 
/*+remote_mapping(db_link)*/或/*+driving_site(table_name)*/


   用法:   /*+driving_site(table_name)*/  : table_name 一般是大表!




select /*+driving_site(main)*/  a.*,b.* from A.a main@BigTableDB,B.b minor where main.id=minor.id and .......

这样一来就可以避免大表所在库的全表扫描,查询速度将成级数级提高。



解释:


当指定 /*+driving_site(main)*/ 时, oracle将会从minor表获取全部数据到main表所在的数据库来进行关联运算.(索引起作用,速度快)
若指定 /*+driving_site(minor)*/ 时, oracle将会从main表获取全部数据到minor表所在的数据库来进行关联运算.(索引失败,全表扫描)

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30345407/viewspace-2150410/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30345407/viewspace-2150410/

<think>好的,用户之前询问了关于数据库迁移时尽量减少SQL修改的问题,我给出了一个详细的推荐列表,其中提到了OceanBase达梦数据库需要结合兼容模式。现在用户进一步询问如何具体实现“OceanBase/达梦+兼容模式”的写法,我需要详细解释这两个数据库的兼容性配置使用方法。 首先,用户可能是在考虑国产化替代,并且已经有一定的MySQL基础。他们可能面临迁移到国产数据库的需求,但希望尽可能减少代码改动。因此,用户需要具体的步骤示例来指导他们如何配置使用这些数据库的兼容模式。 对于OceanBase,我需要强调它支持MySQL模式,并说明如何开启兼容性配置,比如设置SQL模式参数。同时,用户可能需要知道如何调整SQL语句,特别是事务分页查询的部分。例如,OceanBase的分布式事务可能需要显式处理,而分页的LIMIT语法可能需要调整顺序。 关于达梦数据库,虽然它主要兼容Oracle,但用户可能想利用它的MySQL兼容模式。这里需要指出达梦的兼容性配置,比如设置兼容参数COMPATIBLE_MODE=4,并且举例说明常见的改写点,如分页查询的语法差异日期函数的替换。同时,达梦的DBlink功能可能对迁移有帮助,需要提及。 用户可能还会关心工具支持,比如是否有迁移工具或测试工具,以及注意事项,比如事务隔离级别存储过程的调整。需要提醒用户进行充分的测试,尤其是在分布式环境下,OceanBase的事务处理可能有不同的行为,而达梦的函数可能需要替换。 最后,总结两者的适用场景,帮助用户根据自身需求选择。如果用户需要高兼容性且云环境支持,OceanBase可能更合适;如果是强国产化需求,达梦加上兼容模式会更适合,但需要更多的SQL调整。 需要确保回答结构清晰,分步骤说明配置示例,并给出对比表格,帮助用户一目了然地理解两者的差异选择要点。同时,使用代码块表格来增强可读性,确保用户能够顺利应用这些配置。</think>以下是关于**OceanBase与达梦数据库在兼容模式下适配MySQL语法**的具体操作指南,按技术要点分层解析: --- ### 一、**OceanBase(MySQL兼容模式)** #### 1. **配置MySQL兼容性** - **开启MySQL协议**: ```sql -- 启动时配置 ALTER SYSTEM SET ob_compatibility_mode = 'MYSQL'; ``` - **设置SQL模式**: ```sql SET GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES'; -- 与MySQL的sql_mode对齐 ``` #### 2. **关键语法改写示例** - **分布式事务显式声明**: ```sql /* MySQL */ START TRANSACTION; INSERT INTO t1 VALUES (1); COMMIT; /* OceanBase需强制指定事务类型 */ SET ob_trx_timeout = 1000000000; -- 单位:纳秒 START TRANSACTION WITH CONSISTENT SNAPSHOT; ``` - **分页查询调整**: ```sql /* MySQL */ SELECT * FROM table LIMIT 10 OFFSET 20; /* OceanBase需改写为 */ SELECT * FROM table LIMIT 20, 10; -- 注意参数顺序相反 ``` #### 3. **工具支持** - **数据迁移工具**: 使用`OBLOADER/OBPROXY`导入MySQL数据时,自动处理编码类型映射 - **兼容性检查命令**: ```bash obclient -h<IP> -P<PORT> -uroot -p -c "SHOW VARIABLES LIKE '%compat%'" ``` --- ### 二、**达梦数据库(MySQL兼容模式)** #### 1. **开启兼容性配置** - **配置文件修改**(dm.ini): ```ini COMPATIBLE_MODE = 4 -- 4表示MySQL兼容模式 ``` - **会话级设置**: ```sql SET COMPATIBLE_MODE = 4; ``` #### 2. **典型语法适配方案** - **分页查询语法**: ```sql /* MySQL */ SELECT * FROM table LIMIT 10 OFFSET 20; /* 达梦需改写为 */ SELECT * FROM table LIMIT 20, 10; -- 或使用Oracle风格 SELECT * FROM table OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY; ``` - **日期函数转换**: ```sql /* MySQL */ SELECT DATE_FORMAT(NOW(), '%Y-%m-%d'); /* 达梦改写 */ SELECT TO_CHAR(SYSDATE, 'yyyy-mm-dd'); ``` #### 3. **扩展功能使用** - **DBlink跨库查询**(替代MySQL的FEDERATED引擎): ```sql CREATE LINK mysql_link CONNECT 'MYSQL' WITH USER 'root' IDENTIFIED BY 'password' USING '192.168.1.1:3306/dbname'; ``` --- ### 三、**两者对比与选择建议** | 对比项 | OceanBase(MySQL模式) | 达梦(兼容模式) | |--------------------|-----------------------------------------------|----------------------------------------| | **核心兼容性** | 支持MySQL 5.7/8.0协议,分布式特性透明 | 仅基础语法兼容,需大量函数改写 | | **事务处理** | 默认提供分布式事务(Paxos协议) | 仅单机事务,分布式需业务层实现 | | **国产化适配** | 已进入信创目录,但源码开放度较低 | 完全自主知识产权,政府项目首选 | | **性能优化方向** | 擅长海量数据OLAP场景 | 侧重OLTP事务处理 | --- ### 四、**迁移验证流程** 1. **基础兼容性测试**: ```sql -- 验证基础语法 SELECT @@version_comment; -- OceanBase返回"OceanBase" SELECT DM_DATABASE(); -- 达梦返回数据库信息 ``` 2. **事务一致性检查**: ```sql -- OceanBase需验证多副本一致性 SELECT * FROM oceanbase.__all_virtual_trans_stat; ``` 3. **性能压测工具**: - OceanBase:使用`sysbench`或`TPC-C` - 达梦:内置`DMDBTester`工具 --- ### 五、**注意事项** 1. **存储过程差异**: - OceanBase暂不支持`DECLARE HANDLER`异常处理 - 达梦需将`DELIMITER`改为`//` 2. **索引策略**: - OceanBase的全局索引需要显式指定`GLOBAL`关键字 - 达梦不支持`FULLTEXT`全文索引,需改用`CONTEXT`索引类型 --- 通过上述配置改写策略,可在**修改约15-25%的SQL语句**后完成迁移。建议优先迁移非核心业务模块,验证稳定后再逐步推进。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值