2011-10-16 3 views
0

J'ai une grande table avec environ 70 colonnes dans SQL Server 2008. Une application .NET multithread appelle une proc stockée sur la base de données pour insérer/mettre à jour la table. La fréquence est d'environ 3 fois par seconde.Insérer/mettre à jour des verrous de table sur SQL Server

J'ai fait des partitions hebdomadaires sur la table puisque presque toutes les requêtes ont une contrainte datetime sur la table.

Parfois, l'insertion/la mise à jour de la table prend du temps. Je me méfie que parfois INSERTION fait attendre UPDATE; parfois UPDATE fait attendre INSERTION. C'est possible?

Comment puis-je concevoir la table pour éviter de tels verrouillages? La performance est le problème principal ici.

+0

Est-il possible d'insérer des entrées en bloc? Si c'est le cas, vous pouvez accumuler les valeurs pendant une minute et faire une insertion en masse. Vérifiez également s'il y a une opération de performance intensive effectuée dans les déclencheurs de cette table. –

+0

L'insertion en masse n'est pas possible. Parce que chaque enregistrement est reçu par un appel de service Web –

+0

Quelle est la fréquence de lecture de la table? Si la table est fréquemment lue, vous pouvez considérer "noLock" sur certaines requêtes. De même, si les mises à jour ne sont pas effectuées sur la base de la même clé primaire, vous pouvez aussi considérer nolock dans update/insert. –

Répondre

-1

Vous avez raison de dire que vous êtes probablement en train de frapper des blocages, ce qui fait attendre les choses. Un couple de choses à vérifier en premier;

  1. Vos index sont-ils corrects?
  2. Si votre base de données est en mode de récupération 'Full', en avez-vous besoin? La récupération simple accélère vraiment les insertions/mises à jour, mais vous perdez des restaurations ponctuelles pour les sauvegardes.
  3. Êtes-vous susceptible d'avoir plusieurs threads écrivant le même enregistrement? Si ce n'est pas le cas, NOLOCK pourrait être votre ami ici, mais cela signifierait que vos données pourraient être inconsitables pendant une seconde ou deux à l'occasion.
+3

NOLOCK est-il disponible pour l'insertion/la mise à jour? –

+0

L'indicateur NOLOCK n'est * pas * disponible pour l'insertion/la mise à jour "READPAST, NOLOCK et READUNCOMMITTED ne sont pas autorisés" (source: http://msdn.microsoft.com/fr-fr/library/aa260662(v=sql.80) .aspx) – Gibron

Questions connexes