- SQL
- PL/SQL
- DBA
- Developer / Forms
- Developer / Reports
- Developer / Graphics
- Data-Warehouse

 
 
 

 
> Tutorials DBA
 

Orakill - Il killer di precisione
di Giovanni Bronzini

Sui sistemi unix il meccanismo di gestione di thread è sostanzialmente diverso dall'ambiente Microsoft. Senza approfondire l'argomento diremo semplicemente che il "Task Manager" di Windows NT / 2000 non ci permette di identificare, e di conseguenza "killare", un singolo thread.

Fortunatamente nel Resource Kit della Microsoft troviamo un utility che ci permette di verificare l'attività dei processi e dei singoli thread ciascuno identificato dal suo bravo "TID" (Thread ID): "Qslice". Tale utile programma è per fortuna distribuito dalla Microsoft anche al di fuori del (costoso?) Resource Kit ed è reperibile sul sito della casa di Redmond.

Qslice, una volta lanciato, si presenta con una finestra in cui troviamo incolonnati: PID --> ID del processo in esecuzione Image Name --> Nome del processo % Process CPU usage --> diagramma a barre della percentuale di occupazione CPU

Nessuna opzione, nessun menù, nessuna frivolezza a meno dei colori rosso, per identificare "tempo macchina" del kernel, e blu per mostrare il "tempo macchina" di applicazioni utente.

Cliccando sulla riga del processo incriminato compare una finestra simile ove compaiono i dettagli sui thread del processo stesso, tra cui il TID (Thread ID).

La Oracle, dal canto suo, mette a disposizione insieme al suo Database Server l'utility OraKill che consente, una volta identificato il thread incriminato, di provvedere alla sua ... "uccisione".

Lanciandola senza parametri da riga di comando otteniamo un succinto help:

C:\>orakill

Usage:  orakill sid thread

  where sid    = the Oracle instance to target
        thread  = the thread id of the thread to kill

  The thread id should be retrieved from the spid column of a query such as:

        select spid, osuser, s.program 
		     from v$process p, v$session s 
		   where p.addr=s.paddr

Quello che segue è uno script un pò più ricco di dettagli:

set linesize 130
set pagesize 80
col schemaname for a12
col program for a20
col username for a12
col machine for a12
col sid for 99990
col serial# for 99990
col thread# for a6
set wrap on

select p.spid thread#, p.background, s.sid, s.serial#, s.username,s.osuser,s.schemaname, s.status,s.machine,s.terminal,s.program from v$process p, v$session s where p.addr=s.paddr; col schemaname clear col program clear col username clear col machine clear col sid clear col serial# clear col thread# clear

Ricordatevi di agire con la massima cautela nella scelta del thread da eliminare. "Solleticare" in questo modo la macchina può facilmente significare un blocco della stessa! Occhio ai sistemi in produzione se non volete ritrovarvi "crocifissi in sala Server".