kedar001 Ответов: 1

Проблема производительности при извлечении данных из поля varbinary(MAX)


как я могу улучшить производительность оператора sq, содержащего тип данных Varbinary(Max)

структура таблицы
CREATE TABLE [dbo].[Table_1](
    [EmpID] [numeric](18, 0) NOT NULL,
    [SrNo] [numeric](18, 0) NOT NULL,
    [Type] [varchar](10) NULL,
    [FileName] [varchar](100) NULL,
    [D1] [varchar](50) NULL,
    [D2] [varchar](50) NULL,
    [Data] [varbinary](max) NULL,
    [CreatedBy] [varchar](50) NULL,
    [CreatedOn] [datetime] NULL,
 CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED 
(
    [EmpID] ASC,
    [SrNo] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]



SELECT Data FROM [Table_1] where EmpID=661 and SrNo=2
the above Query takes about 2 to 3 seconds to execute because it contains blob data
SELECT FileName,Type FROM [Table_1] where EmpID=661 and SrNo=2
the above Query takes about 0 seconds to execute


Что я уже пробовал:

Checked Indexing of the Table

phil.o

Столбец varbinary вообще не должен индексироваться, по крайней мере, если он содержит большие куски данных. Индексирование такого типа данных может привести к огромному снижению производительности.

kedar001

моя таблица имеет первичный ключ только для столбцов ([EmpID],[SrNo]). как я могу улучшить производительность. из-за этого я также сталкиваюсь с тупиковыми проблемами

phil.o

В среде SQL-Server Management Studio (SSMS) у вас есть возможность проанализировать запрос и посмотреть, где он проводит большую часть своего времени.
Вот список возможных источников информации о том, как анализировать производительность вашего запроса:
устранение неполадок производительности запросов ssms[^]

OriginalGriff

Ответ обновлен.

kedar001

пожалуйста, проверьте https://www.codeproject.com/Questions/3301374/Transactionscope-deadlocked-issue-in-concurruncy

основная причина тупика-это время, необходимое для удаления/вставки данных в таблицу Table_1
есть ли какой-то другой способ преодолеть эту проблему?.

OriginalGriff

В вашем запросе нет delete или insert - SELECT никоим образом не изменяет данные...

kedar001

Извините, что это мое наблюдение. когда я проверяю sql profiler, время, необходимое для удаления записи частиц, составляет около 3 секунд.
то же самое время требуется, чтобы выбрать запись.

1 Ответов

Рейтинг:
1

OriginalGriff

Мы понятия не имеем, что такое запрос, или что он пытается сделать, поэтому мы ничего не можем сделать напрямую, чтобы ускорить его или даже предложить улучшения.

Так что все, что мы можем сделать, это направить вас к Средства мониторинга и настройки производительности - SQL Server | Microsoft Docs[^] и предлагаю вам начать читать!


Цитата:
у меня есть простой SQL-оператор
Выберите данные из [Table_1], где EmpID=661 и SrNo=2
выполнение приведенного выше запроса занимает от 2 до 3 секунд, поскольку он содержит данные blob-объектов
Выберите имя файла,введите из [Table_1], где EmpID=661 и SrNo=2
выполнение приведенного выше запроса занимает около 0 секунд


есть ли какой-нибудь способ улучшить производительность.

Нет, это очень простой запрос - время берется в чистом объеме передаваемых данных, что занимает конечное время в зависимости от пропускной способности соединения между сервером и клиентом.
На первый взгляд, вы храните очень большие данные в своей БД, что всегда является плохой идеей. Вместо этого сохраните данные на файловом сервере и сохраните ссылку на файл в своей БД.
Проверить свой размер большого двоичного объекта : DATALENGTH (Transact-SQL) - SQL Server | Microsoft Docs[^ и я почти уверен, что он будет довольно большим...