Question

Je ne suis pas très expérimenté avec SQL Server, alors peut-être je manque quelque chose

Ma situation est la suivante:

  • Session 1 exécute une instruction CREATE TABLE (ou d'autres déclarations CREATE) avec auto-validation et l'CREER n'est pas comitted.
  • Session 2 exécute une instruction de sp_table mais se bloque aussi longtemps que la session 1 ne commet pas le DDL

Le scénario où cela se produit est développeurs travaillant sur la base de données. Certains d'entre eux parcourant les tables, certains d'entre eux faisant DDL. Si un utilisateur oublie de commettre les toutes les autres sessions DDL qui veulent lister les tables sont bloquées. Notez que le sp_tables est émis par exemple par le client SQL (via l'API du pilote JDBC), il est donc pas quelque chose qui peut être changé.

La base de données que je travaille avec a snapshot_isolation activé et le niveau d'isolation est en lecture commis (SET ALLOW_SNAPSHOT_ISOLATION ON et SET READ_COMMITTED_SNAPSHOT ON)

Mon hypothèse était que ces paramètres doivent faire SQL Server mieux se comporter en ce qui concerne le verrouillage en sessions simultanées (par exemple comme PostgreSQL et Oracle où SELECTs ne sont jamais bloqués par un écrivain) - mais apparemment ce n'est pas le cas.

Alors, est-il un moyen de rendre plus SQL Server amical contre les situations de lecture / écriture simultanées en ce qui concerne DDL? (À l'exception de soumettre DDL uniquement en mode auto-commit).

Autres conseils

Une idée: planifier un travail toutes les 15 secondes pour regarder pour DDLs UNCOMMITED ralenti et mettre fin à des sessions et les rool retour

.
scroll top