Bonjour,
afin d'estimer au mieux la taille d'une temporary database, je cherche à déterminer le "pique" de l'espace occupé dans celle-ci pendant un temps donné.
Bonjour,
afin d'estimer au mieux la taille d'une temporary database, je cherche à déterminer le "pique" de l'espace occupé dans celle-ci pendant un temps donné.
C'est quelque chose d'assez difficile, malheureusement.
Tu peux faire du polling sur master..sysusages, ou tu peux mettre en place des proc sp_thresholdaction qui ne font que imprimer le nombre de pages utilisées (ou libre), ou encore utililser le resource governor en mode "warning" pour faire quelque chose de similaire.
Le plus simple est probablement de mettre en place une sp_thersholdaction, qqch du genre (code non testé!):
Ensuite lorsqu'un seuil est atteint un message est imprimé dans la log Sybase.
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
31
32
33
34
35 use sybsystemprocs go if object_id('sp_tmpthresholdaction') != null begin print "Dropping proc sp_tmpthresholdaction" drop proc sp_tmpthresholdaction end go create procedure sp_tmpthresholdaction @dbname varchar(30), @segmentname varchar(30), @free_space int, @status int as raiserror 99999 "THRESHOLD WARNING: database '%1!', segment '%2!' at '%3!' pages", @dbname, @segmentname, @free_space go -- Mettre des thresholds dans tempdb: use tempdb go -- le troisième argument (100000) est le nombre de pages restantes sp_addthreshold tempdb, 'default', 100000, sp_tmpthresholdaction go sp_addthreshold tempdb, 'default', 200000, sp_tmpthresholdaction go etc... go
Michael
Quelque chose dans le genre:
ce qui donne l'espace libre (en pages) dans la dbid 2 (tempdb).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select sum(curunreservedpgs(dbid, lstart, unreservedpgs)) from sysusages where dbid=2
Michael
tu veux dire qu'il faudrait que je lance cette requête toutes les secondes par exemple.
mais il n'est pas sûr que je n'ai pas mon pique entre deux lancement de cette reqûete.
je crois que je vais opter pour les seuils car en les multipliant, je pourrais savoir si mon pique se trouve entre deux seuils (entre celui qui s'est déclenché et celui qui ne s'est pas déclenché.)
je teste ça et je te dit mon résultat.
Re bonjour,
j'ai créé la petite procédure stockée suivante pour aider à déterminer l'utilisation d'un segment (qui peut être celui d'une tempdb). Elle permet de créer des seuils dans un intervalle de pages restantes avec un incrément defini dans cet intervalle.
Les résultats d'accès des seuils sont placés dans une table.
Une fois qu'on l'a exécuté, il suffit de vider le segment concerné, d'exécuter son processus, de vérifier dans la table créer les seuils qui ont été atteint pour estimer le besoin qui est entre le dernier seuil atteint et le premier non atteint. On peut ensuite finaliser en relancer toute la procédure sur un intervalle ainsi résuit.
Remarque: la procédure stockée permet également de créer une procédure stockée qui va tout suprrimer (seuils, table résultat, procédure exécutée sur seuil). Elle simplifie bien les choses.
seuil.sql
Je ne définie pas cette discussion comme résolu car si des personnes veulent critiquer la solution ou l'écriture de la procédure stockée, qu'elles n'hésitent pas.
Partager