diff --git a/README.md b/README.md index f3ce572..eae4c04 100644 --- a/README.md +++ b/README.md @@ -99,7 +99,7 @@ CREATE TABLE {your_journal_table_name} ( Payload VARBINARY(MAX) NOT NULL, Tags NVARCHAR(100) NULL, SerializerId INTEGER NULL - CONSTRAINT PK_{your_journal_table_name} PRIMARY KEY (Ordering), + CONSTRAINT PK_{your_journal_table_name} PRIMARY KEY (Ordering), CONSTRAINT QU_{your_journal_table_name} UNIQUE (PersistenceID, SequenceNr) ); @@ -145,6 +145,7 @@ ALTER TABLE {your_snapshot_table_name} ADD COLUMN SerializerId INTEGER NULL ```sql ALTER TABLE {your_journal_table_name} DROP CONSTRAINT PK_{your_journal_table_name}; +ALTER TABLE {your_journal_table_name} ADD Ordering BIGINT IDENTITY(1,1) PRIMARY KEY NOT NULL; ALTER TABLE {your_journal_table_name} ADD Ordering BIGINT IDENTITY(1,1) NOT NULL; ALTER TABLE {your_journal_table_name} ADD CONSTRAINT PK_EventJournal PRIMARY KEY (Ordering); ALTER TABLE {your_journal_table_name} ADD CONSTRAINT QU_{your_journal_table_name} UNIQUE (PersistenceID, SequenceNr); @@ -192,9 +193,11 @@ RETURN CONVERT(bigint, END; ALTER TABLE {your_journal_table_name} ADD Timestamp_tmp BIGINT NULL; UPDATE {your_journal_table_name} SET Timestamp_tmp = dbo.Ticks(Timestamp); +DROP INDEX [IX_EventJournal_Timestamp] ON {your_journal_table_name}; ALTER TABLE {your_journal_table_name} DROP COLUMN Timestamp; ALTER TABLE {your_journal_table_name} ALTER COLUMN Timestamp_tmp BIGINT NOT NULL; EXEC sp_RENAME '{your_journal_table_name}.Timestamp_tmp' , 'Timestamp', 'COLUMN'; +CREATE NONCLUSTERED INDEX [IX_EventJournal_Timestamp] ON {your_journal_table_name}([Timestamp] ASC); ALTER TABLE {your_journal_table_name} ADD Tags NVARCHAR(100) NULL; ``` diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 8589d36..f939b18 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,3 +1,9 @@ +#### 1.3.17 January 20 2020 #### +* Upgrades to Akka.Persistence v1.3.17. +* Upgrades to latest SqlClient. +* [Resolved: Generated SQL creates a large number of cached query plans in SQL Server](https://github.com/akkadotnet/akka.net/issues/4141) + + #### 1.3.14 July 30 2019 #### * Upgrades to Akka.Persistence v1.3.14 - resolves major issues with Akka.Cluster.Sharding serialization. * [BatchingSqlJournal now preserves Sender in PersistCallback](https://github.com/akkadotnet/akka.net/pull/3779) diff --git a/src/Akka.Persistence.SqlServer/Akka.Persistence.SqlServer.csproj b/src/Akka.Persistence.SqlServer/Akka.Persistence.SqlServer.csproj index c9d9a14..000fdde 100644 --- a/src/Akka.Persistence.SqlServer/Akka.Persistence.SqlServer.csproj +++ b/src/Akka.Persistence.SqlServer/Akka.Persistence.SqlServer.csproj @@ -23,7 +23,7 @@ - 4.3.0 + 4.8.0 \ No newline at end of file diff --git a/src/Akka.Persistence.SqlServer/Journal/BatchingSqlServerJournal.cs b/src/Akka.Persistence.SqlServer/Journal/BatchingSqlServerJournal.cs index d23838a..d6680eb 100644 --- a/src/Akka.Persistence.SqlServer/Journal/BatchingSqlServerJournal.cs +++ b/src/Akka.Persistence.SqlServer/Journal/BatchingSqlServerJournal.cs @@ -53,6 +53,8 @@ public BatchingSqlServerJournal(Config config) : this(new BatchingSqlServerJourn var c = Setup.NamingConventions; ByTagSql = ByTagSql = $@" + DECLARE @Tag_sized NVARCHAR(100); + SET @Tag_sized = @Tag; SELECT TOP (@Take) e.{c.PersistenceIdColumnName} as PersistenceId, e.{c.SequenceNrColumnName} as SequenceNr, @@ -63,7 +65,7 @@ SELECT TOP (@Take) e.{c.SerializerIdColumnName} as SerializerId, e.{c.OrderingColumnName} as Ordering FROM {c.FullJournalTableName} e - WHERE e.{c.OrderingColumnName} > @Ordering AND e.{c.TagsColumnName} LIKE @Tag + WHERE e.{c.OrderingColumnName} > @Ordering AND e.{c.TagsColumnName} LIKE @Tag_sized ORDER BY {c.OrderingColumnName} ASC "; } diff --git a/src/Akka.Persistence.SqlServer/Journal/SqlServerQueryExecutor.cs b/src/Akka.Persistence.SqlServer/Journal/SqlServerQueryExecutor.cs index e639e3a..c2902c2 100644 --- a/src/Akka.Persistence.SqlServer/Journal/SqlServerQueryExecutor.cs +++ b/src/Akka.Persistence.SqlServer/Journal/SqlServerQueryExecutor.cs @@ -17,6 +17,8 @@ public SqlServerQueryExecutor(QueryConfiguration configuration, Akka.Serializati : base(configuration, serialization, timestampProvider) { ByTagSql = $@" + DECLARE @Tag_sized NVARCHAR(100); + SET @Tag_sized = @Tag; SELECT TOP (@Take) e.{Configuration.PersistenceIdColumnName} as PersistenceId, e.{Configuration.SequenceNrColumnName} as SequenceNr, @@ -27,7 +29,7 @@ SELECT TOP (@Take) e.{Configuration.SerializerIdColumnName} as SerializerId, e.{Configuration.OrderingColumnName} as Ordering FROM {Configuration.FullJournalTableName} e - WHERE e.{Configuration.OrderingColumnName} > @Ordering AND e.{Configuration.TagsColumnName} LIKE @Tag + WHERE e.{Configuration.OrderingColumnName} > @Ordering AND e.{Configuration.TagsColumnName} LIKE @Tag_sized ORDER BY {Configuration.OrderingColumnName} ASC "; CreateEventsJournalSql = $@" diff --git a/src/Akka.Persistence.SqlServer/Snapshot/SqlServerQueryExecutor.cs b/src/Akka.Persistence.SqlServer/Snapshot/SqlServerQueryExecutor.cs index 9ba2ab0..a7f413f 100644 --- a/src/Akka.Persistence.SqlServer/Snapshot/SqlServerQueryExecutor.cs +++ b/src/Akka.Persistence.SqlServer/Snapshot/SqlServerQueryExecutor.cs @@ -41,21 +41,27 @@ CREATE INDEX IX_{configuration.SnapshotTableName}_{configuration.TimestampColumn "; InsertSnapshotSql = $@" + DECLARE @Manifest_sized NVARCHAR(500); + DECLARE @Payload_sized VARBINARY(MAX); + DECLARE @PersistenceId_sized NVARCHAR(255); + SET @Manifest_sized = @Manifest; + SET @Payload_sized = @Payload; + SET @PersistenceId_sized = @PersistenceId; IF ( SELECT COUNT(*) FROM {configuration.FullSnapshotTableName} WHERE {configuration.SequenceNrColumnName} = @SequenceNr - AND {configuration.PersistenceIdColumnName} = @PersistenceId) > 0 + AND {configuration.PersistenceIdColumnName} = @PersistenceId_sized) > 0 UPDATE {configuration.FullSnapshotTableName} SET - {configuration.PersistenceIdColumnName} = @PersistenceId, + {configuration.PersistenceIdColumnName} = @PersistenceId_sized, {configuration.SequenceNrColumnName} = @SequenceNr, {configuration.TimestampColumnName} = @Timestamp, - {configuration.ManifestColumnName} = @Manifest, - {configuration.PayloadColumnName} = @Payload, + {configuration.ManifestColumnName} = @Manifest_sized, + {configuration.PayloadColumnName} = @Payload_sized, {configuration.SerializerIdColumnName} = @SerializerId WHERE {configuration.SequenceNrColumnName} = @SequenceNr - AND {configuration.PersistenceIdColumnName} = @PersistenceId ELSE + AND {configuration.PersistenceIdColumnName} = @PersistenceId_sized ELSE INSERT INTO {configuration.FullSnapshotTableName} ( {configuration.PersistenceIdColumnName}, {configuration.SequenceNrColumnName}, @@ -63,9 +69,11 @@ SELECT COUNT(*) {configuration.ManifestColumnName}, {configuration.PayloadColumnName}, {configuration.SerializerIdColumnName}) - VALUES (@PersistenceId, @SequenceNr, @Timestamp, @Manifest, @Payload, @SerializerId);"; + VALUES (@PersistenceId_sized, @SequenceNr, @Timestamp, @Manifest_sized, @Payload_sized, @SerializerId);"; SelectSnapshotSql = $@" + DECLARE @PersistenceId_sized NVARCHAR(255); + SET @PersistenceId_sized = @PersistenceId; SELECT TOP 1 {Configuration.PersistenceIdColumnName}, {Configuration.SequenceNrColumnName}, {Configuration.TimestampColumnName}, @@ -73,7 +81,7 @@ SELECT COUNT(*) {Configuration.PayloadColumnName}, {Configuration.SerializerIdColumnName} FROM {Configuration.FullSnapshotTableName} - WHERE {Configuration.PersistenceIdColumnName} = @PersistenceId + WHERE {Configuration.PersistenceIdColumnName} = @PersistenceId_sized AND {Configuration.SequenceNrColumnName} <= @SequenceNr AND {Configuration.TimestampColumnName} <= @Timestamp ORDER BY {Configuration.SequenceNrColumnName} DESC"; diff --git a/src/common.props b/src/common.props index a781ac5..ea8db88 100644 --- a/src/common.props +++ b/src/common.props @@ -2,18 +2,19 @@ Copyright © 2013-2019 Akka.NET Team Akka.NET Team - 1.3.14 + 1.3.17 http://getakka.net/images/akkalogo.png https://github.com/akkadotnet/Akka.Persistence.SqlServer https://github.com/akkadotnet/Akka.Persistence.SqlServer/blob/master/LICENSE - Upgrades to Akka.Persistence v1.3.14 - resolves major issues with Akka.Cluster.Sharding serialization. -[BatchingSqlJournal now preserves Sender in PersistCallback](https://github.com/akkadotnet/akka.net/pull/3779) + Upgrades to Akka.Persistence v1.3.17. +Upgrades to latest SqlClient. +[Resolved: Generated SQL creates a large number of cached query plans in SQL Server](https://github.com/akkadotnet/akka.net/issues/4141) $(NoWarn);CS1591 2.4.1 - 1.3.14 - 15.9.0 + 1.3.17 + 16.4.0 netcoreapp2.1 net461 netstandard1.6