Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 расположение поля и размер БД  [new]
Nakeshi
Member

Откуда:
Сообщений: 81
sql server 2008

имеется около 600 таблиц с абсолютно одинаковой структурой.
структура каждой таблицы имеет одно поле размерностью varbinary(max) (пусть будет HugeField).
получается что каждая из таблиц весит в результате сейчас под 3 гигабайта, делая размер базы 1.2 тб.
количество записей около 5000.

Обращение к таблицам через select * вешает студию под 10 минут пока вернет весь набор.
по задачам никогда не требуется такой селект - как раз наоборот все поля кроме этого. зато есть задача типа узнать значение поля HugeField по какому то id записи.
Так же есть задача которая крутится на сервере и несколько раз в день апдейтит "одновременно" десятки тысяч записей - видимо даже сотен. процесс долгий очень занимающий несколько часов.

Вопрос - глядя на всё это - как то это можно половчей соптимизировать?
Например сделать из всех этих 600 таблиц - всего 2. слить в одну всё кроме hugeField. а во вторую залить вместе с id как раз HugeField.
грубо говоря что лучше:
1) 500 таблиц с 5000 записей каждая или 1 таблица с 250к записями ?
2) 500 таблиц с 5000 записей и в каждой HugeField или теже 500 таблиц но без этого поля, а значение поля слить в одну таблицу, которая будет страшно представить сколько весить ?
6 мар 13, 15:00    [14019968]     Ответить | Цитировать Сообщить модератору
 Re: расположение поля и размер БД  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
Nakeshi
Вопрос - глядя на всё это - как то это можно половчей соптимизировать?
Имхо достаточно правильно писать запросы.
Nakeshi
сделать из всех этих 600 таблиц - всего 2. слить в одну всё кроме hugeField. а во вторую залить вместе с id как раз HugeField.
Можно и так, но не принципиально.
Nakeshi
1) 500 таблиц с 5000 записей каждая или 1 таблица с 250к записями ?
2) 500 таблиц с 5000 записей и в каждой HugeField или теже 500 таблиц но без этого поля, а значение поля слить в одну таблицу, которая будет страшно представить сколько весить ?
Одна таблица лучше, чем много.

Вообще тут есть вопросы, что с этими данными делают, как они добавляются/удаляются. Допустим, для быстрой массовой загрузки/удаления можно использовать секционирование.
6 мар 13, 15:09    [14020050]     Ответить | Цитировать Сообщить модератору
 Re: расположение поля и размер БД  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33970
Блог
alexeyvg,

по 5000 записей в секции? )

Nakeshi
Обращение к таблицам через select * вешает студию под 10 минут пока вернет весь набор.
по задачам никогда не требуется такой селект - как раз наоборот все поля кроме этого. зато есть задача типа узнать значение поля HugeField по какому то id записи.


не используйте звездочку, она же вам не нужна
6 мар 13, 15:27    [14020190]     Ответить | Цитировать Сообщить модератору
 Re: расположение поля и размер БД  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
Критик
alexeyvg,

по 5000 записей в секции? )
Почему бы и нет, если 5000 записей - это 100 гигабайт?
6 мар 13, 19:45    [14021688]     Ответить | Цитировать Сообщить модератору
 Re: расположение поля и размер БД  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Nakeshi
Вопрос - глядя на всё это - как то это можно половчей соптимизировать?


Перво наперво отказать от использования реляционной СУБД там, где она ни к селу, ни к городу.
6 мар 13, 20:21    [14021800]     Ответить | Цитировать Сообщить модератору
 Re: расположение поля и размер БД  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
pkarklin
Nakeshi
Вопрос - глядя на всё это - как то это можно половчей соптимизировать?


Перво наперво отказать от использования реляционной СУБД там, где она ни к селу, ни к городу.
В общем да. Может, РСУБД тут и нужна, но блобы можно было бы хранить как файлы, или использовать FileStream
6 мар 13, 22:21    [14022193]     Ответить | Цитировать Сообщить модератору
 Re: расположение поля и размер БД  [new]
Nakeshi
Member

Откуда:
Сообщений: 81
При использовании FileStream - данные из поля HugeField( varbinary(max)) будут всё также храниться в таблицах или будут вынесены в файловую структуру - на жёсткие диски ?
11 мар 13, 12:28    [14034627]     Ответить | Цитировать Сообщить модератору
 Re: расположение поля и размер БД  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3274
Nakeshi
При использовании FileStream - данные из поля HugeField( varbinary(max)) будут всё также храниться в таблицах или будут вынесены в файловую структуру - на жёсткие диски ?
Как настроите - можно по-всякому.

Вот тут Пол Рэндалл тестировал на 2008 производительность различных вариантов хранения блобов в разрезе размеров оных.
11 мар 13, 17:15    [14036672]     Ответить | Цитировать Сообщить модератору
 Re: расположение поля и размер БД  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Ennor Tiegael
Nakeshi
При использовании FileStream - данные из поля HugeField( varbinary(max)) будут всё также храниться в таблицах или будут вынесены в файловую структуру - на жёсткие диски ?
Как настроите - можно по-всякому.

Как это — по-всякому? Данные будут храниться будут в файловой системе, без вариантов.
BOL
When the FILESTREAM storage attribute is specified for a column, all values for that column are stored in a FILESTREAM data container on the file system.

А вот доступ к этим данным, действительно, можно осуществлять по-разному — как через T-SQL, так и через WinAPI.
11 мар 13, 17:25    [14036710]     Ответить | Цитировать Сообщить модератору
 Re: расположение поля и размер БД  [new]
Nakeshi
Member

Откуда:
Сообщений: 81
подключил для сервера поддержку FileStream. и создал тестовую табличку уже с записью в FileStream. и перелил туда все данные из старой.
получилось как то так:

CREATE TABLE [dbo].[tempTbl_FileStream](
[SprId] [uniqueidentifier] ROWGUIDCOL NOT NULL,
... SomeDataField ...
[HugeField] [varbinary](max) FILESTREAM NULL,
UNIQUE NONCLUSTERED
(
[SprId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] FILESTREAM_ON [ContentFileGroup]

ALTER TABLE [dbo].[tempTbl_FileStream] ADD DEFAULT (newid()) FOR [SprId]

Rowcount 500332
DataSpace 90Mb


против того что было


CREATE TABLE [dbo].[tempTbl_OldData](
... SomeDataField ...
[HugeField] [varbinary](max) NULL
) ON [PRIMARY]

Rowcount 500332
DataSpace 82Mb


при апдейте tempTbl_FileStream - файлы видно появляются в настроенной для FileStream папке.
Вопрос - почему tempTbl_FileStream в Storage всё так же занимает столько же места ?
12 мар 13, 10:47    [14038777]     Ответить | Цитировать Сообщить модератору
 Re: расположение поля и размер БД  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
Nakeshi
Вопрос - почему tempTbl_FileStream в Storage всё так же занимает столько же места ?
А как смотрели, сколько таблица занимает места в файле данных? Или Storage - это не файл данных, а диск? Тогда понятно, почему занимает :-)
12 мар 13, 13:11    [14039846]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить