Таблица In-Memory в кластере высокой доступности SQL 2014 не запрашивается на вторичных узлах
Я установил простую таблицу в памяти в базе данных группы высокой доступности на SQL 2014. Запрос таблицы непосредственно с основного узла или из прослушивателя работает нормально. Если я изменяю строку запроса на ReadOnly Intent или пытаюсь выполнить запрос напрямую с любого из 2 вторичных узлов, я получаю следующую ошибку: -
Msg 41341, Level 16, State 1, Line 1
Table 'tbl_GetMakes' is not yet available on the secondary replica.
В Интернете очень мало информации об этом сообщении. Он говорит о том, что он правильно реплицируется, когда происходит процесс "REDO". Насколько я понимаю, процесс "REDO" должен быть автоматическим, таблица уже на месте уже более 24 часов и до сих пор не работает. Любые идеи кто-нибудь? Спасибо Джон
1 ответ
Спасибо Шону Галларди, который ответил на это на форуме Microsoft
Я воспроизвел ответ по ссылке выше: -
Это не правильно, они могут быть абсолютно прочитаны из читаемого вторичного устройства, если предположить: таблица в памяти была создана с помощью Durability = schema_and_data. На первичном сервере была запущена контрольная точка. Используется надлежащий уровень изоляции. Я могу легко заставить это работать, вот repro: 1. Создать базу данных на первичном и поставить в AG
CREATE DATABASE [Test1]
CONTAINMENT = NONE
ON PRIMARY
( NAME = N'Test1',
FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\Test1.mdf' ,
SIZE = 4096KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ),
FILEGROUP [IMOLTP] CONTAINS MEMORY_OPTIMIZED_DATA DEFAULT
( NAME = N'imoltp_dir',
FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\imoltp_dir' ,
MAXSIZE = UNLIMITED)
LOG ON
( NAME = N'Test1_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\Test1_log.ldf' , SIZE = 1280KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO
- Создайте таблицу IM и заполните
CREATE TABLE dbo.IMOLTP ( C1 INT NOT NULL ПЕРВИЧНЫЙ КЛЮЧ, НЕКЛАСТЕРНЫЙ ХЭШ С
Вставить в dbo.IMOLTP(C1) значения (1), (2), (3) GO
КОНТРОЛЬНО-ПРОПУСКНОЙ ПУНКТ
SELECT * FROM dbo.IMOLTP
- Читать из читаемого вторичного
Используйте Test1 GO
SELECT * FROM dbo.IMOLTP GO
Он отлично работает для меня: Microsoft SQL Server 2014 (SP2-CU3) (KB3204388) - 12.0.5538.0 (X64)
-Sean