1、两表字段匹配时由于字段类型不同,导致性能下降。
2、两表字段匹配,同时大表字段有条件筛选,由于sql代码问题,先匹配再筛选,导致性能下降。
3、筛选字段上应用了时间或字符函数,导致未用索引。
其他可能还有,待各位老师和同行补充。
个人觉得,oracle对于情况1和2,可能有些自带的优化处理,导致不发生性能问题,而同样的语句拿到pg,就不行了。
在数据库迁移中会遇到大量的问题sql,能不能有通用的处理方法,能自动发现到上述会引起性能问题sql?
1 首先应该了解,字段类型在两种数据库之间的不同表达的方式,在更替PostgreSQL 数据库中替换效率更高的字段类型,如 VARCHAR 不选择 Char 类型等
2 了解POSTGRESQL 与 ORACLE 在索引上的异同点,比如函数索引在POSTGRESQL 是可以被使用的
3 针对JOIN 中非等值计算中无法和ORACLE 使用 Merge Join 的问题,需要对语句进行拆分,甚至采用新的语句的写法来进行替换
关于发现迁移性能中的问题是否能自动化发现,这需要
1 有相关的迁移后的业务POC 压测
2 开启PostgreSQL 相关的插件 pg_stat_statement 在压测期间,发现SQL 性能的问题
3 通过数据库本身的手段 和 程序的手段 共同解决问题,而不是单纯依靠数据库的手段来单独解决。
针对上述问题,可以采取以下解决思路:
在这种情况下,可以考虑对字段类型进行转换,使其匹配。如果无法转换,则可以使用函数将字段进行转换,以便进行匹配。此外,还可以考虑使用索引来提高匹配的效率。
在这种情况下,可以考虑优化SQL语句,将筛选条件放在匹配条件之前,以便先筛选出需要的数据,再进行匹配。此外,还可以考虑使用索引来提高匹配和筛选的效率。
在这种情况下,可以考虑使用索引来提高查询效率。如果无法使用索引,则可以考虑对数据进行预处理,以便在查询时不需要使用函数。
对于数据库迁移中遇到的问题SQL,可以考虑使用自动化工具进行处理。例如,可以使用SQL性能分析工具来分析SQL语句的性能问题,并提供优化建议。此外,还可以使用SQL自动化工具来自动发现和修复性能问题SQL。