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