Combien de temps faut-il pour courir
ALTER DATABASE [MySite] SET READ_COMMITTED_SNAPSHOT ON
Je viens de le lancer et ça a pris 10 minutes.
Comment puis-je vérifier s'il est appliqué?
Combien de temps faut-il pour courir
ALTER DATABASE [MySite] SET READ_COMMITTED_SNAPSHOT ON
Je viens de le lancer et ça a pris 10 minutes.
Comment puis-je vérifier s'il est appliqué?
Vous pouvez vérifier l'état du paramètre READ_COMMITTED_SNAPSHOT à l'aide de l' sys.databases
vue. Vérifier la valeur de l' is_read_committed_snapshot_on
colonne. Déjà posées et répondues.
Comme pour la durée, des Livres en Ligne il ya des états qui ne peuvent pas être toutes les autres connexions à la base de données lorsque cela a lieu, mais il n'exige pas la mode mono-utilisateur. Donc, vous pouvez être bloqué par d'autres connexions actives. Exécutez sp_who
(ou sp_who2
) pour voir à quoi d'autre est connecté à la base de données.
OK (je suis l'original de l'interlocuteur) il s'avère donc tout ce temps je n'ai même pas de la chose sacrée activé.
Voici l' ultime code à exécuter pour activer le mode snapshot et assurez-vous qu'il est activé.
SELECT is_read_committed_snapshot_on, snapshot_isolation_state_desc,snapshot_isolation_state FROM sys.databases WHERE name='shipperdb'
ALTER DATABASE shipperdb SET allow_snapshot_isolation ON
ALTER DATABASE shipperdb SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE shipperdb SET read_committed_snapshot ON
ALTER DATABASE shipperdb SET MULTI_USER
SELECT is_read_committed_snapshot_on, snapshot_isolation_state_desc,snapshot_isolation_state FROM sys.databases WHERE name='shipperdb'
Cela fonctionne même avec des connexions actives (sans doute que vous êtes bien avec eux, recevoir des coups de pied).
Vous pouvez voir l'avant et l'après de l'état et cela devrait fonctionner presque immédiatement.
IMPORTANT:
L'option READ_COMMITTED_SNAPSHOT ci-dessus correspond à IsolationLevel.ReadCommitted .NET
L'option ALLOW_SNAPSHOT_ISOLATION ci-dessus correspond à IsolationLevel.Instantané dans le .NET
Excellent article sur la gestion des versions différentes
.NET Conseils:
Ressemble Isolationlevel.ReadCommitted
est autorisé dans le code même si non activé par la base de données. Aucun avertissement n'est jeté. Donc, ne vous une faveur et assurez-vous qu'il est activé avant que vous suppose que c'est pour 3 ans comme je l'ai fait!!!
Si vous êtes à l'aide de C#, vous voudrez probablement l' ReadCommitted
IsolationLevel et pas Snapshot
- sauf si vous faites de l'écrit dans cette transaction.
READ COMMITTED SNAPSHOT
ne optimiste lit et pessimiste écrit. En revanche, SNAPSHOT
ne optimiste lit et optimiste écrit. (à partir d'ici)
bool snapshotEnabled = true;
using (var t = new TransactionScope(TransactionScopeOption.Required,
new TransactionOptions
{
IsolationLevel = IsolationLevel.ReadCommitted
}))
{
using (var shipDB = new ShipperDBDataContext())
{
}
}
Dans supplémentaires, vous pouvez obtenir une erreur "impossible de promouvoir" une transaction. Recherche pour "promotion" dans l'Introduction du Système.Les Transactions dans le .NET Framework 2.0.
Sauf si vous faites quelque chose de spécial, comme une connexion à une base de données externe (ou deuxième base de données), puis une chose aussi simple que la création d'un nouveau DataContext peuvent être en cause. J'ai eu une cache que " filé son propre datacontext à l'initialisation et l'on essaie d'escalader la transaction distribuée complète.
La solution est simple :
using (var tran = new TransactionScope(TransactionScopeOption.Suppress))
{
using (var shipDB = new ShipperDBDataContext())
{
// initialize cache
}
}
Voir aussi Deadlocked
article par @CodingHorror
Essayez ce code:
if(charindex('Microsoft SQL Server 2005',@@version) > 0)
begin
declare @sql varchar(8000)
select @sql = '
ALTER DATABASE ' + DB_NAME() + ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE ;
ALTER DATABASE ' + DB_NAME() + ' SET READ_COMMITTED_SNAPSHOT ON;
ALTER DATABASE ' + DB_NAME() + ' SET MULTI_USER;'
Exec(@sql)
end
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.