Bonjour,

J'utilise une table oracle pour synchroniser des processus .net et Oracle. Les nombres énormes d’insert/delete fait ralentir toutes la DB (600% du processeur).

Dans la table j'ai maximum 30 lignes.

Y aurait-il une solution pour ce genre de problématique.

Merci beaucoup.

Code utilisé:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
-- Create table
create table LCK
(
	LCK_ID  NUMBER(38),
  LCK_NME VARCHAR2(1000 BYTE) not null,
  DTE     DATE default sysdate not null,
  DTE_REQ DATE,
  SES_REQ VARCHAR2(100)  
);
-- Create/Recreate primary, unique and foreign key constraints 
alter table LCK
  add constraint P_LCK primary key (LCK_ID);
-- Create/Recreate indexes 
create unique index U_LCK on LCK (LCK_NME);

Request Lock
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
  procedure request_lock_table(lock_id in number, lock_name in varchar2, request_date in date, request_session in varchar2) is
    pragma autonomous_transaction;
    v_request_date date;
    v_count number(28);
  begin
    select nvl(request_date, sysdate) into v_request_date from dual;
    begin
       select count(*) into v_count from lck where lck_id = lock_id;
      if (v_count != 0) then        
 
        dbms_lock.sleep(0.5);
        request_lock_table(lock_id, lock_name, request_date, request_session);
 
      else
 
        insert into lck
          (lck_id, lck_nme, dte, dte_req, ses_req)
        values
          (lock_id, lock_name, sysdate, request_date, request_session);
        commit;
 
      end if;
    exception
      when dup_val_on_index then
        dbms_lock.sleep(0.5);
        request_lock_table(lock_id, lock_name, request_date, request_session);
      when others then
        raise_application_error(-20000, 'request lock failed (' || sqlcode || ') :' || sqlerrm);
    end;
  end request_lock_table;

Release Lock

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure release_lock_table(lock_id in number) is
    pragma autonomous_transaction;
  begin
    begin
      -- Delete specific lock
      delete from lck
       where lck_id = lock_id;
      commit;
    exception
      when others then
        raise_application_error(-20000, 'release lock failed: ' || lock_id);
    end;
    begin
      -- Delete the locks when the start date is more than 10 minutes
      delete from lck
       where dte < sysdate - (10 / 1440);
      commit;
    exception
      when others then
        raise_application_error(-20000, 'release old lock failed');
    end;
  end release_lock_table;