Pull to refresh
98
0
Send message
Сравнивать разные версии не совсем корректно. Если бы идентичные были версии, а так сложно сказать.

То что возникает тайм-ауйт вариантов может быть много. Просто приведу пример из жизни: на сервере IIS + SQL Server у базы включено свойство AUTO_CLOSE (при создании БД на экспрессе неявно само устанавливается в TRUE). Соединений нет — IIS заснул и база тоже. Возникает коннекшен. IIS начинает грузить диск и обращается в это время к SQL Server, который пытается поднять базу. Нагрузка на диск возрастает еще больше и IIS на определенном этапе говорит time-out при попытке выполнить запрос к БД.

Я это к чему… Вариантов может быть сколько угодно почему у Вас разрывает соединение. Посмотрите на ожидания, которые возникают на сервере. Возможно есть один-два запроса, которые на экспрессе вследствие недостатка памяти могут один план выполнения иметь, а на другом инстансе (где памяти море) генерировать другой менее эффективный, который и будет приводить к тайм-ауту.
Спасибо. Было интересно почитать. Очень понравилась идея использовать при создании индекса вычисляемые значения, а не как на SQL Server — вначале создавать COMPUTED столбец, а потом по нему строить индекс:

SELECT *
FROM ...
WHERE CAST(InsertDateTime AS DATE) = '20160101'

ALTER TABLE ...
    ADD InsertDate AS CAST(InsertDateTime AS DATE)

CREATE NONCLUSTERED INDEX ix ON ... (InsertDate)

SELECT *
FROM ...
WHERE InsertDate = '20160101'
Developer Edition и Enterprise Edition (самая жирная редакция) идентичны и различаются только в рамках @@version. Относительно того, что не справляется с нагрузкой: посмотреть в логи, на настройки сервера и выяснить причину почему возникает проблема. Если не помогает попробовать установить последнее кумулятивное обновление. Описание Вашей проблемы немного скудное, поэтому сложно конкретизировать.
Наверное уже раз так в 20-тый захожу этот пост читать. Еще раз спасибо за полезный материал. Жаль, что нельзя второй раз плюсануть.

Прикреплю тут два скрипта, вдруг кому будет еще полезным.

1. Очистка sys.dm_os_wait_stats:

DBCC SQLPERF("sys.dm_os_wait_stats", CLEAR)

2. И слегка модифицированный запрос на выборку статистики ожиданий:

SELECT TOP(20)
      wait_type
    , wait_time = wait_time_ms / 1000.
    , wait_resource = (wait_time_ms - signal_wait_time_ms) / 1000.
    , wait_signal = signal_wait_time_ms / 1000.
    , waiting_tasks_count
    , percentage = 100.0 * wait_time_ms / SUM(wait_time_ms) OVER ()
    , avg_wait = wait_time_ms / 1000. / waiting_tasks_count
    , avg_wait_resource = (wait_time_ms - signal_wait_time_ms) / 1000. / [waiting_tasks_count]
    , avg_wait_signal = signal_wait_time_ms / 1000.0 / waiting_tasks_count
FROM sys.dm_os_wait_stats
WHERE [waiting_tasks_count] > 0
    AND max_wait_time_ms > 0
    AND [wait_type] NOT IN (
        N'BROKER_EVENTHANDLER', N'BROKER_RECEIVE_WAITFOR',
        N'BROKER_TASK_STOP', N'BROKER_TO_FLUSH',
        N'BROKER_TRANSMITTER', N'CHECKPOINT_QUEUE',
        N'CHKPT', N'CLR_AUTO_EVENT',
        N'CLR_MANUAL_EVENT', N'CLR_SEMAPHORE',
        N'DBMIRROR_DBM_EVENT', N'DBMIRROR_EVENTS_QUEUE',
        N'DBMIRROR_WORKER_QUEUE', N'DBMIRRORING_CMD',
        N'DIRTY_PAGE_POLL', N'DISPATCHER_QUEUE_SEMAPHORE',
        N'EXECSYNC', N'FSAGENT',
        N'FT_IFTS_SCHEDULER_IDLE_WAIT', N'FT_IFTSHC_MUTEX',
        N'HADR_CLUSAPI_CALL', N'HADR_FILESTREAM_IOMGR_IOCOMPLETION',
        N'HADR_LOGCAPTURE_WAIT', N'HADR_NOTIFICATION_DEQUEUE',
        N'HADR_TIMER_TASK', N'HADR_WORK_QUEUE',
        N'KSOURCE_WAKEUP', N'LAZYWRITER_SLEEP',
        N'LOGMGR_QUEUE', N'ONDEMAND_TASK_QUEUE',
        N'PWAIT_ALL_COMPONENTS_INITIALIZED',
        N'QDS_PERSIST_TASK_MAIN_LOOP_SLEEP',
        N'QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP',
        N'REQUEST_FOR_DEADLOCK_SEARCH', N'RESOURCE_QUEUE',
        N'SERVER_IDLE_CHECK', N'SLEEP_BPOOL_FLUSH',
        N'SLEEP_DBSTARTUP', N'SLEEP_DCOMSTARTUP',
        N'SLEEP_MASTERDBREADY', N'SLEEP_MASTERMDREADY',
        N'SLEEP_MASTERUPGRADED', N'SLEEP_MSDBSTARTUP',
        N'SLEEP_SYSTEMTASK', N'SLEEP_TASK',
        N'SLEEP_TEMPDBSTARTUP', N'SNI_HTTP_ACCEPT',
        N'SP_SERVER_DIAGNOSTICS_SLEEP', N'SQLTRACE_BUFFER_FLUSH',
        N'SQLTRACE_INCREMENTAL_FLUSH_SLEEP',
        N'SQLTRACE_WAIT_ENTRIES', N'WAIT_FOR_RESULTS',
        N'WAITFOR', N'WAITFOR_TASKSHUTDOWN',
        N'WAIT_XTP_HOST_WAIT', N'WAIT_XTP_OFFLINE_CKPT_NEW_LOG',
        N'WAIT_XTP_CKPT_CLOSE', N'XE_DISPATCHER_JOIN',
        N'XE_DISPATCHER_WAIT', N'XE_TIMER_EVENT'
    )
ORDER BY [wait_time_ms] DESC
Просто дополню… На практике изменение affinity mask редко помогает повысить производительность. Как правило, получается все наоборот, поэтому уж лучше это значение не трогать.
Честно говоря, был еще один вопрос. А будет ли поддерживаться информация о билдах в этой статье. На мой вопрос Вы ответили. Ещё раз спасибо за полезный материал.
Спасибо за проделанную Вами работу. Но все же скажите зачем было дублировать информацию из Microsoft SQL Server Version List?
К слову будет сказано, что SQL Server 2014 Developer Edition теперь доступен бесплатно.
Формально Developer Edition является лицензией на разработчика, но в EULA я не нашел ограничения устанавливать ее тестовые сервера. Поэтому Ваше сомнение можно развеять :)
Поддерживаю. Например, для меня SSMS — это основной рабочий инструмент. Хоть последняя SSMS 2016 весит и вправду многовато (около 1,2Гб). Смысл переходить на китайскую поделку? И даже если посмотреть по сторонам… Как ответили ниже, можно заюзать DataGrip, но в нем еще не все базовые плюшки SSMS поддержаны, поэтому остается dbForge Studio.
А почему именно под Windows?

Так сложилось исторически. Сейчас нагрузка на БД возросла и хотелось бы упростить все. Вот и смотрю по сторонам, на что мигрировать.
Обильное количество статей по Tarantool в последнее время, меня тоже заинтересовало попробовать на реальном кейсе в действии данную СУБД. Все что меня ограничивает — отсутствие поддержки Windows, поэтому хотел поинтересоваться сколько должно набраться критической массы… чтобы Вы поддержали работу на Windows платформе?

Относительно проекта, где я хотел бы попробовать Tarantool — это бесплатный сервис для форматирования SQL запросов. При каждом клике отправляется статистика какие настройки изменились и далее по этим данным делается аналитика:



Что чаще всего меняется… Tarantool-у такое по силам? :)
Очень жалею, что с Хабра убрали раздел новости. Тем не менее, за анонс мероприятия спасибо!
Уж наболело… и за себя скажу. Что не нравится? То что Microsoft сгоняет всех устанавливать 10-ку. При этом не гарантируя, что все будет работать как и предыдущих версиях. То что сегодня я включил сетевой адаптер на ноуте и вышел попить кофе. Вернулся и с моего компа перекачалось на сервера Microsoft телеметрии на 1,5Гб. Если Вам нравится 10-ка, то Вы счастливый человек (среди моих знакомых много разделяет Ваше мнение). Но лично мне по работе новая винда только головную боль приносит.
В EULA нет ни слова, что нельзя изменять по своему усмотрению базу master.
использование дорогой, тяжеловесной и капризной СУБД MS SQL

При должном уровне кривизны рук можно так сказать на любую коммерческую СУБД.

эта необходимость приобретать MS SQL Server 2008 Standard, Developer или Enterprise, если нужно более 15 мест и объём базы данных превышает 10 ГБ

Ограничение в 10Гб и 1Гб ОЗУ в Express редакции конечно же существенный минус. Но если взять во внимание, что база master не имеет никаких ограничений по размеру, то все можно ее использовать в качестве основной БД. Хоть это и не комильфо, но бюджет экономит.
Уважаемый, я не гуру и никогда этого о себе не говорил. Заявляете, что если в табличную переменную записать 4Гб данных при 2Гб ОЗУ на машине и все будет в памяти — это Ваше право. Относительно адекватности, лично я Вас не провоцировал. И Вы правы мне оно не надо — тратить свое рабочее время, чтобы доказать Вам что-то...
справедливость восстановлена?

Нет.… и все потому, что Вы раскидываетесь понятиями не до конца понимая как все работает.

Временная таблица и табличная переменная используют базу tempdb (обсуждаем общий случай). Вот пруф, что данные туда действительно попадают:

DECLARE @t TABLE(i INT)
INSERT INTO @t
VALUES (1), (2)
SELECT sys.fn_PhysLocFormatter(%%physloc%%)
FROM @t

Далее происходит чтение страниц в BufferPool:

SELECT *
FROM sys.dm_os_buffer_descriptors
WHERE database_id = DB_ID('tempdb')



И уже потом когда страницы в буфер-пуле SQL Server ними может оперировать… И как быть если размер моей таблицы больше, чем размер свободного места в BufferPool? Как он сможет хранить такой объект в памяти? Делать пример, имитировать недостаток памяти и нагрузку… и что-то доказывать я желания не имею.

И еще… используя термины "память" Вы упускаете из виду другие другие особенности табличных переменных. Отсутствие статистики. Неверную оценку кардинальности. Необходимость делать рекомпиляцию. Еще можно вспомнить про транзакции и прочие приколы.

Не верите мне. Почитайте, что говорит Martin Smith в этом случае.
Особых проблем с такими значениями у Вас быть не должно. Обычно тот трейс флаг советовали включать, когда количество спинлоков переваливает за 200-300 миллиардов.
Кто из вас прав выясняйте без меня.

Не знаю, почему Вы в негативном ключе воспринимаете мои слова. Выяснять кто прав не стоит… Вот написанная "на коленке" элементарная проверка:

SELECT COUNT(1) FROM tempdb.sys.tables
GO
DECLARE @t TABLE (i INT)
SELECT COUNT(1) FROM tempdb.sys.tables

-----------
1
-----------
2

Information

Rating
Does not participate
Registered
Activity