SQL Process Explorer

Pour moi, sous Windows, l’application la plus importante à toujours été (de loin) Process Explorer de Mark Russinovich, alors quand j’ai commencer a remplir des fonctions de DBA un programme similaire m’a immédiatement manqué pour superviser SQL Server.

Comme j’ai été un développeur (depuis le ZX81 il y a quelques années ;) ) avant de devenir DBA j’ai fini par décider de faire un moi même une application de monitoring pour SQL Server. Et puisque j’ai toujours été reconnaissant à Mark pour la gratuité (et la qualité) de son travail, c’est maintenant mon tour d’offrir mon programme à ceux qui le voudront :

Le programme ne nécessite pas d’installation (comme procexp), c’est un simple executable .NET Framework 3.5 Client profile x86 (~400 Ko) :

Download SQLProcexp

Historique des versions

Il peut donc être lancer de n’importe quel répertoire (dans lequel il va générer un fichier .config pour enregistrer vos paramètres).

Le mode de capture principal est basé sur sys.sysprocesses, sys.dm_exec_requests et sys.dm_exec_sessions et double cliquer sur une ligne de la liste bascule sur l’onglet « Query » pour visualiser la requête et la ré-exécuter si besoin :

QuerySample

Les plus hauts niveaux de CPU, logical read, physical read, write, Wait time, Signal wait et 2 liste de wait configurable sont historisés. En passant la souris sur les histograms on obtient les informations de cette période avec la requête SQL qui était exécuté à ce moment par le process le plus consommateur du compteur concerné :

PopStatem

Il est donc simple de voir ce qu’il se passe en temps réel sur une instance, ou à un n’importe quel moment passé enregistré.

Les 2 listes de waits configurables sont par défaut (le titre se trouve avant les ‘:’ et les waits surveillés sont séparés avec des ‘;’ ensuite) :

IOWait:WRITELOG;IO_COMPLETION;PAGEIOLATCH_DT;PAGEIOLATCH_EX;PAGEIOLATCH_KP;PAGEIOLATCH_SH;PAGEIOLATCH_UP;ASYNC_IO_COMPLETION;

CXPacket:CXPACKET

J’ai ajouté un mode de capture expérimental basé sur la vue sys.dm_exec_query_stats (group by query_hash). Ce mode est accessible dans le menu option :

MenuDmQueryStats

Dans ce mode, vous pouvez voir en violet les requêtes exécutées en parallèle, avec un elapsed time inférieur au worker time (pas une méthode parfaite je dois admettre).

Voilà, après cette petite introduction il ne vous reste plus qu’a l’expérimenter par vous même, en espérant que ça vous sera aussi utile qu’a moi. Si vous avez des idées je suis ouvert à toutes les propositions d’amélioration et si vous trouvez des bugs vous pouvez les signaler dans les commentaires de cette page ou par mail : sqlprocexp@gmail.com

 

Publicités

SQL Process Explorer

For me, under Windows, the most important application has always been (by far) Process Explorer by Mark Russinovich, so when I started to assume DBA functions a similar program immediately missed me to monitor SQL Server.

As I was a developer (starting with the ZX81 a few years ago ;) ) before becoming DBA, I finally decided to make one myself. And since I’ve always been so thankful to Mark for his work (of such a quality) to be free, it is now my turn to offer freely my monitoring application for SQL Server to anyone who wants :

SQLProcexpApp

It doesn’t need any installation (as procexp), it’s a simple standalone .NET executable file Framework 3.5 Client profile x86 (~400 Ko) :

Download SQLProcexp

Version history

So it can be launch from any directory (in witch it will generate a .config file to save your parameters).

The main capture mode is based on sys.sysprocesses, sys.dm_exec_requests, and sys.dm_exec_sessions. Double-clicking on a row in the list show the « Query » tab to review the query and re-run if necessary:

QuerySample

The highest level of CPU, logical read, physical read, write, Wait Time, Signal wait, and 2 users configurables list of waits are historized and by passing the mouse over the histograms we obtain the information of this period with the SQL query that was executed at that time by the most consuming process of the counter concerned:

PopStatem

It’s then simple to see what is currently happening on the instance, or at any time recorded in the past.

The default user configurable waits are (before ‘:’ is the title of the wait and after separate with ‘;’ are the monitored waits) :

IOWait:WRITELOG;IO_COMPLETION;PAGEIOLATCH_DT;PAGEIOLATCH_EX;PAGEIOLATCH_KP;PAGEIOLATCH_SH;PAGEIOLATCH_UP;ASYNC_IO_COMPLETION;

CXPacket:CXPACKET

I’ve added an experimental capture mode based on the sys.dm_exec_query_stats view (group by query_hash). This mode is accessible in the option menu:

In this mode you can see in purple the query executed in parallel, with elapsed time lower than worker time (not a perfect method I must admit).

Here we are, after this quick introduction you should now experiment it by yourself, hoping that it will be as useful to you as it is to me. If you have ideas I am open to all suggestions for improvement and if you find bugs you can post them in the comments of this page or by mail : sqlprocexp@gmail.com

 

The time travel

For Christmas a little walk ! :) But to travel in the past or in the future we must first well understand what is the time …

And in fact intuitively everyone has a pretty good idea of ​​what it is, for example, we all know that if the time stopped suddenly, everything would become simply immobile at once. What we know perhaps a little less is that we could no longer see this « immobile » world, since light itself would be stationary and would not reach us anymore, but hey, that’s alright, and basically we all have a good « intuition » of what is the time… Because time is not so complicated, time is the movement of everything in the universe, if we « slow down » these movements (we’ll see how further) then time slows. And if the movements are « reverse » then the time go back. Finally, if movements are accelerated time accelerates.

There is another thing that should be noticed, and this is important because this is what will allow us to travel in time, it’s that the speed of these movements are not necessarily the same everywhere in the universe : the movements can stop only in a well defined area of ​​the universe and continue normally elsewhere. Or they can go « faster » in an area, and then the time is passing more rapidly in it than in the rest of the universe.

So time is not « absolute » in the universe, this is not something abstract, that embrace the whole universe, almost « separated » from the universe even, no, the time is very concrete, it is the movements, if we stop them all, then we stops the time !.. Quite simply if I may.

And here it is our « means of transport » in time ! If we keep the « normal » time in a machine and we do go back all the movements of the universe (or only the solar system to remain modest :) ) then we « travel » in the past !

But many fantasies are related to travel in the past, to « meet oneself » for example … This is misunderstanding how the time travel in the past is working because as we have seen if a traveler wants to go back in time in a region of the universe then it must reverse all the movements of this area except his own… Indeed the traveler should not go back, otherwise he would not travel in the past finally, he would return with the entire area (and not even being aware of what happens…). So the « matter » of the traveler, inside the machine continues its normal path in time, but it means that this « matter » of the traveler, is no longer « part » of the universe that goes back outside the machine…

And that’s extremely important to take into consideration because that means that this area go back into a different past from what it was ! a past without the « matter » of the traveler… To well understand an example : imagine that the traveler just before boarding his machine had a discussion in a bar with a friend. At the beginning of the trip all the matter in the area of ​​the universe comes back, so the friend « heads » backwards towards the bar. The traveler does not heads backwards to the bar, he’s in the machine, he’s excluded from the area turning back. When the friend arrived at the bar he do not encounter the traveler, the « matter of the traveler, » as it is in the machine… So he talks to alone ?

No, he’s not, he « will » not speak « anymore » we can say, since he has no more interlocutor… Even if the universe evolves in reverse direction the rules of the interactions of matter continues to be be respected, they are just in reverse : for example, if an object had bounced on another, if we remove one of the two object and backwards this area, the object that remains does not rebound alone in this « new past », he continues his course, in the reverse direction of course, but this time without bouncing, so it goes in a different past from what it was, because the matter in presence itself is different.

More generally, excluding a part of the material from one area of ​​the universe that comes backward is a butterfly effect « in reverse » in that area, the « reversed » events will change more and more compared to what they were as the « initial difference » will spread, and gradually all the events « will » be different from what they had been.

So what about killing a « parent » !? it makes us disappear suddenly ? Let study this case : a traveler travel back in time, in fact we saw, we should say instead « all the movements of a region of the universe return back except those of a traveler. » The parent goes back, but in a world WITHOUT the traveler who is in the machine. As we saw, gradually interactions that the traveler made do not occur in reverse as they had been made by him and this leads to a different past. To such an extent that even the mother does not gives birth to the child !! Indeed the matter of the traveler did not come back, and thus he did not become back a baby, and her mother is not « going » to be « pregnant » of the traveler because the baby did not « come » back… She will do something else :) … All the « parents » of the traveler are gone back, but in a past that ended up to be completely different from what it was when the traveler was there. In short, if the machine stop and the passenger kill any of its parent, well nothing happens, he or she does not disappear .. (he just goes to jail because you can bet that the police of that time will not believe his history !! :) )

OK, enough with theory, now to practice ! :)

So, to travel in time in a region of the universe, we must influence the movements in the area, slow down, speed up, or even reverse… But how ?

One of the central « parameter » of movements, so of time, is inertia. Inertia is the resistance to the speed change of an object, the acceleration or slowdown. Usually we are not very aware of inertia because it is proportional to the mass and generally we are moving relatively light objects, but for example you can feel it well when you have to push someone on a swing, especially if the person is heavy. Inertia, proportional to the mass, is the « center » of the way movements behave and therefore inertia/mass is in the « center » of how time passe.

Then, one of the central problem to solve to travel in time, to change the mouvements of one region of the universe, is to change the inertia in this area.

There is two possibilities : either we change the inertia of an entire area and the passenger keep his, or it is the traveler who changes his own inertia in its machine and the entire universe keeps his. We see immediately that the difficulty with the first solution is that you have to influence the inertia of an entire region, large enough (about a solar system let’s say), to increase it or decrease it compared to a traveler who would keep his… In practice it is a little difficult to implement…

On the other hand influencing the inertia of a confined area is much easier to imagine… If we were able to increase the inertia/mass in a machine that would effectively make harder all mouvements changes, for example pushing at the same force the person on the swing would move him more slowly. All movements change in the machine would be more « difficult », the time would be « slowed down ». And since outside of the machine in the world, time always passe normally, well this is it ! we travel in the future !! :) .. The traveler in the machine see everything in the world moving very quickly, and seen from the world, in his machine, he seems almost immobile.

But beware, as for the trip in the past we do not travel in the same future as if we had participated in this world, inevitably, because we are in the machine, so we are away from the world, we have no influence on it, and it evolve without us. But still, it evolves « in the future » relatively to the traveler, this is the most important, and we will arrive 20 years later discovering new technologies, and of course people will have 20 years more than us he he :)

At the opposite if we reduce the inertia in a small area, in a machine, all movements will happen faster, and thus the time passe faster than in the universe.

There it is :) In conclusion, I think that going back in time to the past, even in a small area, is almost certainly, and unfortunately, impossible, and even if it was possible, we saw that it would be under certain conditions, for example in any case it wouldn’t be instantly, it would take « some time », a « backward time », the time to do EVERYTHING « move » in the area back, in any case a « door » that would project us instantly years back could not exist, it would simply misunderstanding the time itself to imagine that way of traveling back in time.

On the over hands traveling in the future is probably possible, by just « simply » increasing the inertia/mass of a traveler in a machine as we saw, time of the universe would passe normally and the traveler would remain « standing still » so he would travel in the future. Applications can be imagined : a new kind of fridge : the inertia fridge !! it stops the time of the food :) that’s the progress ! At the opposite you can also design an inertia prison, in this case we reduce the inertia of the « traveler prisoner » one minute in the world is for him one year.. prison sentences are executed right at the end of the jugement ! in five minutes :) But for the wine, it’s simply a revolution !! :D ;)

Le voyage dans le temps

Pour Noël une petite balade ! :) Mais pour voyager dans le passé ou dans le futur il faut d’abord bien comprendre ce qu’est le temps…

Et en fait intuitivement tout le monde a une assez bonne idée de ce que c’est, par exemple on sait tous que si le temps s’arrêtait subitement, et bien tout serait simplement immobile d’un seul coup. Ce qu’on sait peut-être un peu moins c’est qu’a ce moment on ne pourrait plus voir ce monde « immobile », puisque la lumière elle même immobile ne nous parviendrait plus, mais bon, ce n’est pas très grave, et en gros nous avons tous une bonne « intuition » de ce qu’est le temps… Parce que le temps c’est n’est pas si compliqué, le temps c’est le mouvement de tout ce qu’il y a dans l’univers, si on « ralenti » ces mouvements (on verra comment ensuite) alors le temps ralentit. Et si les mouvements font « marche arrière » alors le temps recule. Enfin si les mouvements s’accélèrent alors le temps s’accélère.

Il y a autre chose qu’il faut souligner, et c’est important puisque c’est ce qui va nous permettre de voyager dans le temps, c’est que la vitesse de ces mouvements n’est pas obligatoirement la même dans tout l’univers : les mouvements peuvent s’arrêter seulement dans une zone bien définie de l’univers et continuer normalement partout ailleurs. Ou ils peuvent aller « plus vite » dans une zone, et alors le temps s’y écoule plus rapidement que dans le reste de l’univers.

Donc le temps n’est pas « absolu » dans l’univers, ce n’est pas quelque chose d’abstrait, qui engloberait tout l’univers, pratiquement « séparé » de l’univers même, non, le temps c’est très concret, c’est le mouvement, si on arrête tous les mouvements, on arrête le temps !.. tout simplement j’ai envie de dire.

Et le voilà notre moyen de « transport » dans le temps ! : si on conserve le temps « normal » dans une machine et qu’on fait revenir en arrière tous les mouvements de l’univers (ou bien seulement du système solaire pour rester modeste :) ) et bien on « voyage » dans le passé !

Mais de nombreux fantasmes sont liés au voyage dans le passé, de « se rencontrer soit même » par exemple… C’est mal comprendre comment le voyage dans le passé se déroule car comme on vient de le voir si un voyageur veut revenir dans le temps dans une région de l’univers alors il doit inverser tous les mouvements de cette région sauf les siens… En effet le voyageur ne doit pas revenir en arrière, sinon il ne « voyagerait » pas dans le passé finalement, il reviendrait avec la zone entière (et ne se rendrait même pas compte de ce qui se passe…). Donc la « matière » du voyageur, à l’intérieur de la machine, continue son chemin normal dans le temps, mais du coup ça veut dire que cette « matière », du voyageur, ne fait plus « partie » de l’univers qui revient en arrière à l’extérieur de la machine…

Et c’est primordial de le prendre en compte parce que ça veut dire que cette zone revient dans un passé différent de ce qu’il a été ! un passé sans la « matière » du voyageur… Pour bien comprendre un exemple : imaginons que le voyageur juste avant de monter dans sa machine ait eu une discussion dans un bar avec un ami. Au départ du voyage toute la matière de cette zone de l’univers revient en arrière, donc l’ami se « dirige » à reculons vers ce bar. Le voyageur lui ne se dirige pas vers le bar à reculons, il est dans la machine, il est exclu du retour en arrière de la zone. Quand l’ami arrive au bar il n’y rencontre pas le voyageur, la « matière du voyageur », puisqu’elle est dans la machine… Du coup il parle tout seul ?

Non, il ne parlera même pas, il ne parlera « plus » on peut dire, puisqu’il n’a plus d’interlocuteur… Même si l’univers évolue à l’envers les règles des interactions de la matière continue d’y être respectés, elles sont juste à l’envers : par exemple si un objet avait rebondi sur un autre, alors si on fait revenir en arrière cette zone en retirant un des deux objet, celui qui reste ne rebondit pas tout seul dans ce « nouveau passé », il continue sa course, « à l’envers » certes, mais sans rebondir cette fois, dans un passé différent de ce qu’il avait été, parce que la matière en présence est elle même différente.

Plus généralement, exclure une partie de la matière d’une zone de l’univers qui revient en arrière correspond à un effet papillon « à l’envers » dans cette zone, les événements « inversés » vont changer de plus en plus par rapport à ce qu’ils ont été à mesure que la « différence initiale » va se propager, et petit à petit c’est tous les événements qui « vont » être différents de ce qu’ils avaient été.

Alors quid de tuer un « parent » !? ça nous fait disparaître d’un coup ? Voyons ce cas : un voyageur revient dans le temps, en fait on l’a vu, il faut plutôt dire « tous les mouvements d’une région de l’univers reviennent en arrière sauf ceux d’un voyageur ». Le parent revient donc en arrière, mais dans un univers SANS le voyageur qui est dans la machine. Comme on l’a vu petit à petit les interactions que le voyageur y avait faites ne se produisent pas à l’envers comme elles avaient été faite par lui et cela conduit à un passé différent A tel point que la mère n’accouche même pas de cet enfant !! Et oui, la matière du voyageur n’est pas revenu en arrière, elle, et il n’est donc pas redevenu un bébé, et sa mère ne peut pas « redevenir enceinte » du voyageur puisque le bébé n’est pas « revenu » lui… Elle va faire autre chose :) … Tout les « parents » du voyageur sont tous bien revenu en arrière, mais dans un passé qui fini par être complètement différent de ce qu’il a été quand le voyageur était là. Bref si on arrête la machine et que le voyageur tue n’importe lequel de ses parent, et bien rien ne se passe, il ne disparaît pas.. (il va juste en prison car on peut parier que la police de l’époque ne croira pas son histoire !! :) )

Bon, voilà pour la théorie, maintenant passons à la pratique ! :-)

Pour voyager dans le temps dans une zone de l’univers, donc, il faut influencer les mouvements dans cette zone, les ralentir, les accélérer, ou même les inverser… Mais comment faire ?

L’un des « paramètre » central du mouvement, donc du temps, c’est l’inertie. L’inertie c’est la résistance au changement de vitesse d’un objet, l’accélération ou le ralentissement. On n’est pas toujours conscient de l’inertie car elle est proportionnelle à la masse et généralement on déplace des objets relativement léger, mais par exemple on la sent bien quand il faut pousser quelqu’un sur une balançoire, d’autant plus si la personne est lourde. L’inertie, proportionnelle à la masse, est au « centre » de la façon dont les mouvements se font, donc l’inertie/masse est au « centre » de la façon dont « s’écoule » le temps.

Donc, l’un des problème central à résoudre pour voyager dans le temps, pour modifier les mouvements d’une région de l’univers, est de changer l’inertie dans cette zone.

Il y a deux possibilités : soit on change l’inertie d’une zone toute entière et le voyageur conserve la sienne, soit c’est le voyageur qui change son inertie propre dans sa machine et l’univers tout entier conserve la sienne. On voit tout de suite que la difficulté avec la première solution c’est qu’il faut influencer de façon uniforme l’inertie d’une région entière, suffisamment grande (de l’ordre d’un système solaire disons), pour l’augmenter ou la réduire par rapport à un voyageur qui conserverait la sienne… En pratique c’est un peu difficile à mettre en oeuvre…

Par contre influencer l’inertie d’une zone confinée est plus facilement concevable… Si on augmentait l’inertie/masse dans une machine ça aurait pour effet de rendre encore plus difficile tout les changements de vitesse, par exemple en poussant de la même force la personne sur la balançoire elle se mettrait en mouvement plus lentement. Tous les changement de mouvements dans la machine serait plus « difficile », le temps y serait « ralenti ». Et puisqu’à l’extérieur de la machine, dans le monde, le temps s’écoule toujours normalement, et bien ça y est ! nous voyageons dans le futur !! :) .. Le voyageur dans la machine voit tout dans le monde se mettre à bouger très vite, par contre vu du monde, dans sa machine, il semble pratiquement immobile.

Mais attention, comme pour le voyage dans le passé on ne voyagera pas dans le même futur que s’on avait participé à ce monde, forcément, car on est dans la machine, donc on est à l’écart du monde, on n’a aucune influence dessus, et il évolue sans nous. Mais quand même, il évolue « dans le futur » par rapport au voyageur, c’est le plus important, et on arrivera 20 ans plus tard en découvrant des technologies nouvelles, et bien sur les gens auront 20 ans de plus que nous hé hé :)

A l’opposé si on réduit l’inertie dans une petite zone, dans une machine, tous les mouvements s’y feront plus vite, et donc le temps s’y écoulera plus vite que dans l’univers.

Et voilà :) En conclusion, je pense que revenir dans le passé, même d’une petite zone, c’est presque certainement, et malheureusement, impossible, et même si ça l’était on a vu que ce serait sous certaines conditions, par exemple ça ne serait en aucun cas instantané, ça prendrait un « certain temps« , un « temps à l’envers », le temps de TOUT faire « bouger » dans la zone concernée à rebours, il ne pourrait en aucun cas y avoir de « porte » qui instantanément nous projetterait des années en arrière, ce serait simplement mal comprendre le temps que d’imaginer ce « moyen » de voyager dans le passé.

Par contre voyager dans le futur c’est probablement possible, il suffit « simplement » d’augmenter l’inertie/masse d’un voyageur dans une machine comme on l’a vu, le temps de l’univers s’écoulerait normalement et le voyageur resterait « figé », donc il voyage dans le futur. On peut imaginer des applications : une nouvelle sorte de frigo : le frigo à inertie !! on arrête le temps des aliments :) ça c’est du progrès ! A l’inverse on peut aussi concevoir une prison à inertie, il suffit dans ce cas de réduire l’inertie du « voyageur prisonnier », une minute dans le monde correspond pour lui à une année.. les peines de prisons sont exécutés juste à la fin du procès ! en cinq minutes :) Par contre pour le vin, alors là c’est une vraie révolution !! :D ;)