Una de las principales diferencias de oracle para Unix y Windows radica en que, debido a el tipo de sistema operativo, en Windows tenemos un proceso monolítico oracle.exe, y no la multitud de procesos que nos encontramos en los sistemas Unix. Así pues, cuando queremos saber cual es el proceso que se nos come la CPU, siempre vamos a tener una misma respuesta oracle.exe y, además de eso, probablemente no podamos enlazarlo con los procesos de sistema operativo.
¿Como solucionamos este problema?
Para empezar, mi recomendación es tener en el servidor uno de estos dos programas
- Pprocess explorer
- QSlice
Los dos programas son gratuitos y se pueden descargar desde soporte de microsoft, y nos permitirán ver con mayor facilidad el origen de nuestro problema.
Si abrimos el process explorer , veremos algo similar a esto:

Aquí podemos ver como uno de los procesos oracle se esta comiendo el 100% de la CPU , si hacemos boton derecho «propiedades», el process explorer nos indicará en una ventana independiente la informacion de este proceso, si vamos a la pestaña «threads» y ordenamos por CPU, tendremos:

Aqui vemos como los treads que mas CPU están consumiendo son
- 3076 con el 23%
- 4976 con el 19,95%
Ahora, teniendo estos dos número de thread, si que podremos ir a nuestra ventana de sql y enlazar este numero de thread con el proceso/sesion de Oracle que está causando la carga
select proc.spid ThreadNO, sess.username Usuario, sess.osuser OSUser, sess.machine Maquina, sess.status Estado, sess.sid SessionID, sess.program Program from v$process proc, v$session sess, v$bgprocess bg where sess.paddr = proc.addr and bg.paddr(+) = proc.addr and proc.spid in (3076)
Esta informacion tambien puede obtenerse con qslice.exe, solamente que la información del thread está en exadecimal, y habremos de pasarla a decimal, por otra parte, la ventaja del qslice.exe es que es más ligero que el process explorer, con lo que, como decía al principio, mi recomendación es tener los dos en el servidor