在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/室內(nèi)設(shè)計(jì)  數(shù)據(jù)庫(kù)/ 某語(yǔ)句導(dǎo)致Oracle數(shù)據(jù)庫(kù)CPU占用率高

某語(yǔ)句導(dǎo)致Oracle數(shù)據(jù)庫(kù)CPU占用率高

執(zhí)行某SQL語(yǔ)句后貌似Oracle數(shù)據(jù)庫(kù)(12c)服務(wù)器CPU占用被拉高,導(dǎo)致所有數(shù)據(jù)庫(kù)操作變緩,SQL本身并無(wú)特別,大概邏輯如下:

"select sum(a.shuliang) sl from a,b where a.someid_a=? and a.someid_b=? and b.someid_c=? and a.id=b.id"

        ps = con.prepareStatement(sql);
        if (params != null) {
            for (int i = 0; i < params.size(); i++) {
                Object v = params.get(i);
                ps.setObject(i + 1, v);
            }
        }
        rs = ps.executeQuery();

使用上述SQL的程序一直沒(méi)有問(wèn)題,突然一天發(fā)現(xiàn)只要執(zhí)行就會(huì)導(dǎo)致數(shù)據(jù)庫(kù)變慢,然后在程序中將上述SQL的參數(shù)值直接拼入SQL之后(如下),拖慢問(wèn)題不再出現(xiàn),同處理中的其他SQL也使用了參數(shù)形式但唯獨(dú)此SQL有問(wèn)題。

"select sum(a.shuliang) sl from a,b where a.someid_a='"+變量A+"' and a.someid_b='"+變量B+"' and b.someid_c='"+變量C+"' and a.id=b.id"

求解。

回答
編輯回答
單眼皮

oracle中sql語(yǔ)句如用了綁定變量,根據(jù)變量采樣數(shù)據(jù)形成的執(zhí)行計(jì)劃,可能會(huì)和實(shí)際的數(shù)據(jù)分布不一致,造成性能低下。
字符串拼接形成的sql不存在此類問(wèn)題,但會(huì)帶來(lái)硬解析過(guò)多,在并行執(zhí)行sql多的情況會(huì)嚴(yán)重影響數(shù)據(jù)庫(kù)整體性能。

如果能確認(rèn)合理的執(zhí)行計(jì)劃,可以通過(guò)hints或outline固化執(zhí)行計(jì)劃。

2018年6月16日 23:58