本日の面接まとめ:INSERT合併過大によるロック問題解決
今日面接に行ってこの問題に聞かれて、最初は本当に彼の言うことが分からなかった.
1.一時シナリオ1:ロック・テーブルの状況を確認し、ロック・テーブルを処理する
2.暫定案2:流量制御、書き込み周波数制御:
(1)アクセス層,アプリケーション層,サービス層,データアクセス層でトラフィックを制御することができ,
(2)メッセージキューでデータベースへの書き込み速度を非同期制御したり、RPCツールでキューへのデータのキャッシュを行い、データベースへの書き込み頻度を制御したりすることもできます.
3.長期案:実際の業務に基づいてデータを切り分ける、つまり表を分ける、これも最も複雑である.
既存
0人がメッセージを発表し、猛撃->
ここで<<-ディスカッションに参加
ITeye推奨—ソフトウェア人材免言語低保証渡米有給大学院!—
1.一時シナリオ1:ロック・テーブルの状況を確認し、ロック・テーブルを処理する
/*
*locked
*query locked object and analyse reason,kill it
*
*/
select 'alter system kill session ''' || SID || ',' || SERIAL# || ''';'
from (select distinct a.sid,
a.Serial#,
status,
machine,
LOCKWAIT,
logon_time
from v$session a, v$locked_object b
where (a.status = 'ACTIVE' or a.status = 'INACTIVE')
and a.sid = b.session_id
and b.ORACLE_USERNAME = 'XYHISTEST' --
)
/*2、
alter system kill session 'sid,serial#';
alter system kill session '6976,33967';*/
/*3、 oracle , , */
SELECT l.session_id sid,
s.serial#,
l.locked_mode,
l.oracle_username,
l.os_user_name,
s.machine,
s.terminal,
o.object_name,
s.logon_time
FROM v$locked_object l, all_objects o, v$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid
ORDER BY sid, s.serial#;
/*3. */
select s.SID, s.OSUSER, p.spid as OSPID, s.MACHINE, s.TERMINAL, s.PROGRAM
from v$session s, v$process p
where s.sid = 6 --session_id
and s.paddr = p.addr;
/*4、 sql */
select b.sql_text
from v$session a, v$sql b
where a.sid = 6 --session_id
and a.SQL_ADDRESS = b.ADDRESS(+);
/*5、 sql */
SELECT l.session_id sid,
s.serial#,
l.locked_mode,
l.oracle_username,
s.user#,
l.os_user_name,
s.machine,
s.terminal,
a.sql_text,
a.action
FROM v$sqlarea a, v$session s, v$locked_object l
WHERE l.session_id = s.sid
AND s.prev_sql_addr = a.address
ORDER BY sid, s.serial#;
2.暫定案2:流量制御、書き込み周波数制御:
(1)アクセス層,アプリケーション層,サービス層,データアクセス層でトラフィックを制御することができ,
(2)メッセージキューでデータベースへの書き込み速度を非同期制御したり、RPCツールでキューへのデータのキャッシュを行い、データベースへの書き込み頻度を制御したりすることもできます.
3.長期案:実際の業務に基づいてデータを切り分ける、つまり表を分ける、これも最も複雑である.
既存
0人がメッセージを発表し、猛撃->
ここで<<-ディスカッションに参加
ITeye推奨