2010-05-11 9 views
1

J'ai une base de données avec des données de jeu (carte, joueurs, etc ...) et j'ai une mécanique de base de jeu écrite en procédure stockée T-SQL.Travail SQL Server avec un timing précis

J'ai besoin d'une boucle de jeu de processus (via la procédure stockée) toutes les "X" secondes.

J'ai essayé d'utiliser le travail SQL, mais lorsque j'ai défini l'intervalle sur secondes, le serveur SQL cesse de répondre. Si j'ai réglé l'intervalle plus d'une minute, tout allait bien.

J'ai besoin d'une boucle de jeu précise dans le temps, par ex. la boucle de jeu ne fonctionnera qu'une seule fois et sera exécutée chaque "X" avec précision (la tolérance devrait être inférieure à une seconde). Est-ce que je peux le faire avec les capacités de SQL Server?

Ou devrais-je créer un service Windows qui répétera la procédure de boucle de jeu? Ou devrais-je aller d'une autre façon?

Merci!

EDIT:

La procédure stockée boucle de jeu prend moins de l'intervalle.

+2

Combien de temps votre procédure nécessaire pour l'exécution? Si c'est toujours plus d'une seconde, j'imagine que vous allez rencontrer des difficultés. – Paddy

+0

La procédure prend une seconde/deux/trois, doit cependant toujours prendre moins de l'intervalle - l'une des exigences pour la fonctionnalité correcte du système. – TcKs

+0

Peut-être une meilleure question serait - ce qui se passe si elle n'a pas (blocage imprévu, système raccrochage)? – Paddy

Répondre

1

Je voudrais utiliser un service Windows pour cela. Avoir une boucle avec un thread dormir dedans pour l'attendre toutes les x secondes.

Le problème avec les travaux de minuteur de type utilisés dans le serveur SQL est qu'il existe un service de minuterie qui vérifie si un travail doit être exécuté. Ce travail du minuteur peut vérifier par exemple toutes les 2 minutes, donc la précision jusqu'à une seconde n'est pas possible.

+0

Je l'ai fait de cette façon. Il fonctionne pendant des semaines et aucune erreur ne se produit. Donc, c'est probablement la bonne solution. – TcKs

0

Pour exécuter lissée avec un intervalle de 1 sec, vous pouvez utiliser le code:

CREATE PROCEDURE SP_Execute_job 
AS 
    WHILE 1=1 
    BEGIN 
    WAITFOR DELAY '00:00:01' 
    EXECUTE 'somewhat job' 
    END 
END 

Cette sp doit être exécuté après chaque démarrage SQL Server:

exec sp_procoption N'SP_Execute_job', 'startup', 'on' 
Questions connexes