Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Есть ли ограничения на максимальную скорость выборки данных из одного табличного пространс

Есть ли ограничения на максимальную скорость выборки данных из одного табличного пространства?

Имеем БД:
DB2 LUW ver 9.7 fix pack 8 Enterprise x64
на платформе: Win 2008 R2 Enterprise x64
сервер: BC Hx5, CPU: E7-4870, RAM: 384GB
СХД: Storwize V7000.
Суть проблемы:
Есть таблица с количеством строк порядка 5 млд. записей и небольшой средней длинной записи . В табличном пространстве только эта таблица. На таблице 1 кластеризованный индекс, который используется когда выборка данных небольшая и не используется когда итоговая выборка составляет > 300 тыс. строк. Это все нормально и оптимизатор отрабатывает корректно, поскольку таблица кластеризована именно по этой большой выборке и коэффициент селективности небольшой.
Проблема заключается в том, что когда идет большая выборка данных мы видим, что суммарная нагрузка на СХД очень мала (примерно 25 -35 MB/s), причем скорость выборки не зависит ни от нагрузки на БД не от нагрузки на СХД. Причем скорость выборки не зависит даже от мощности СХД, наши тесты на DS5100 и на Storwize v7000 показывают одинаковые результаты. На обоих СХД используется 1 большой массив из RAID 10. Попытка разнести табличное пространство на 10 логических дисков (в пределах 1 массива на СХД) не принесла результата, мы имеем все ту же скорость ~30 MB/s., пропорционально распределенную по контейнерам. На комбинированных тестах мы получали на Storwize v7000 суммарную скорость ~ 2 GB/s. Изменение параметров: intra_parallel & querydegree результатов не дали, не можем понять где узкое место. DB2ADVIS говорит, что так и должно быть и изменений не требуется.

Вопрос. Почему мы не можем получить сравнимые скорости (или хотя бы улучшение) при выборке данных? На что стоит посмотреть, на какие параметры БД или может СХД?

Спасибо.
Ответ:
Mark Barinstein
use-se
пока писал ответ скорость изменилась, сейчас скачет 7-30 мб/с

Интересно насколько актуальным является параметр db2_parallel_io=*.45 (сейчас стоит) для СХД вроде Storwize, мне сказали,
что не актуально, это так?

Надо план запроса смотреть - использование индексов тут, скорее всего, будет очень неэффективным.
Большую таблицу надо бы попробовать организовать по MDC (с1).
db2_parallel_io=* (т.е. 6) для Storwize в IBM PDOA. У вас очень большое значение.

План запроса напрямую зависит от количества выбираемых данных.
Основное назначение БД OLTP, т.е. для нашей большой таблицы на 1 запрос выбирается от 20 до 1000
записей, время выборки меньше 1 секунды (доли секунды), здесь используется индекс.
При большой выборке, как было указано вначале, индекс не используется, а если и используется
(на граничных условиях) то приводит, как правило, к увеличению общего времени выборки.

Таблица имеет уникальный кластерный индекс по 3 первым полям (bigint,date,bigint), соответственно.
Здесь немного статистики.
F1: 100 * OVERFLOW / CARD < 5
F2: 100 * (Effective Space Utilization of Data Pages) > 70
F3: 100 * (Required Pages / Total Pages) > 80

SCHEMA.NAME CARD OV NP FP ACTBLK TSIZE F1 F2 F3 REORG
----------------------------------------------------------------------------------------
Table: big_tab
5,2e+09 0 9e+07 9e+07 - 3,46e+11 0 99 99 ---
----------------------------------------------------------------------------------------

Index statistics:

F4: CLUSTERRATIO or normalized CLUSTERFACTOR > 80
F5: 100 * (Space used on leaf pages / Space available on non-empty leaf pages) > MIN(50, (100 - PCTFREE))
F6: (100 - PCTFREE) * (Amount of space available in an index with one less level / Amount of space required for all keys) < 100
F7: 100 * (Number of pseudo-deleted RIDs / Total number of RIDs) < 20
F8: 100 * (Number of pseudo-empty leaf pages / Total number of leaf pages) < 20

SCHEMA.NAME INDCARD LEAF ELEAF LVLS NDEL KEYS LEAF_RECSIZE NLEAF_RECSIZE LEAF_PAGE_OVERHEAD NLEAF_PAGE_OVERHEAD PCT_PAGES_SAVED F4 F5 F6 F7 F8 REORG
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Table: big_tab
Index: big_tab_PK
5,2e+09 6e+07 55765 5 7e+07 5,2e+09 20 20 370 370 0 69 73 2 1 0 *----
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
В момент первой загрузки/реорганизации по кластерному индексу clasterfacktor конечно же был выше, но и сейчас выборка
большого количества данных из таблице не намного хуже (по времени). Главная проблема, что нет прироста скорости на новом железе. Первичная реорганизация была offline. Конечно же хотелось бы реорганизовать табличку снова, но....
На тестовом сервере (с этой же БД) с имитацией нагрузки я пытался сделать online реорганизацию, но после 5 дней непрерывной реорганизации прервал ее.
Относительно маленькой таблицы, то она каждый день содержит новые данные и после каждого ETL чистится.
Я не вижу, что с ней можно сделать, там всего 1 поле (bigint).

Относительно:
>>Большую таблицу надо бы попробовать организовать по MDC (с1).
буду пробовать, но немного страшновато по следующим причинам:
1. Уникальность первичного ключа - это 3 поля, следовательность размерность будет 3? насколько вырастет потребность в дисковом пространстве?
2. пока не имею практики использования (почитать, конечно же почитаю и попробую), но насколько сложны
эти MDC в обслуживании?
3. я так понял стоит попробовать именно
автор
ORGANIZE BY -- Groups rows with similar values on multiple dimensions in the same table extent. This concept is known as multidimensional clustering (MDC).

а не
автор
PARTITION BY -- Groups rows with similar values of a single dimension in the same data partition. This concept is known as table partitioning.


Mark Barinstein
db2_parallel_io=* (т.е. 6) для Storwize в IBM PDOA. У вас очень большое значение.

здесь немного не понял, вариант
а)db2_parallel_io=*
или
б)db2_parallel_io=*.6

Буду пробовать, тестировать - это займет время.
У меня будет возможность проверить эту выборку на IBM FlashSystem, посмотрим, что там будет.

Большое спасибо всем за помощь, всем удачных выходных.
Вопрос: Оптимизация и улучшение алгоритма выборки данных о составе (структуре) Изделия

Всем Наилучшего Времени ДНЯ!

Долго собирался и вот решился обратиться к коллективному РАЗУМУ!

Дело в том, что имеющаяся база предназначена для обработки данных (документов) изготовления Изделий. Причём Изделия имеют разную структуру и сложность, более того Изделия изготавливаеются разными технологическими методами (Металлоизделия и Швейные).

На сегодняшний день реализована модель структуры данных об Изделии по методу уровней входимости.
0-й уровень: непосредственно само изделие - установочная информация о нем, обозначение, наименование, вес, номенклатурный номер;
1-й уровень: детали входящие в изделие, обозначение, наименование, основной и вспомогательные материалы с нормами и номенклатурными номерами, ценой на дату;
2-й уровень: Сборочные единицы Изделия, полная информация о сборке без входимых в неё частей, т.е. информация о СБ как о таковой;
3-й уровень: Детали Сборочной Единицы Изделия, информация полная, как у деталей Изделия;
4-й уровень: Сборочные единицы, входящие во 2-й уровень, т.е. подсборки

ну и так далее, в зависимости от сложности Изделия.
. на сегодняшний день использованы Запросы на выборку данных по конкретным уровням. Поэтому приходится каждый раз прописывать выборку нужной информации из определённой цепочки входимости.

Так вот в чем вопрос:
Можно ли создать, естественно на VBA, расчет в котором будет происходить выборка интересующих данных с указанием уровня входимости, но до признака отсутствия данных, например в таблице Состав Сборки в поле ДетальСборки – ‘.’, то же самое в поле ПодСборка – ‘.’, и при налиции еще одного показателя в количестве – 0.

с уважением Alex999kon
Ответ: Я бы сделал визуализацию этих сборок-изделий так:

Форма-структура Изделия.
В левой части тривью с переченем всех Изделий (Узлы, имеющие таковой статус).
При щелчке узел Изделия раскрывается на узлы Сборок и конечные листики Деталей. Так повторяется рекурсивно до самого последнего уровня.

В правой части карточка текущего узла.

Для Сборки - показаны ее данные (свойства, атрибуты) + вложенный грид входящих в нее Сборок следующего уровня и Деталей. На другой вкладке показано, в какие еще Изделия или Сборки верхнего уровня входит данная Сборка.
Для Детали - показаны ее данные (свойства, атрибуты). Вложенный грид, в какие еще Изделия или Сборки входит данная Деталь.

Таблица Всех ваапще Деталей. Перечень по алфавиту, характеристикам, отбор по нужным атрибутам.
Таблица Всех ваапще Сборок. Перечень по алфавиту, характеристикам, отбор по нужным атрибутам.
Карточка Сборки (описана выше).
Карточка Детали (описана выше).

Переходы между всеми этими формами.

Два дня работы полностью под ключ.
Вопрос: Выборка данных по кличеству символов

Как запросом можно сделать выборку данных в столбце по количеству символов.
Ответ:
SQL
1
SELECT Таблица.[данные] FROM Таблица WHERE Len([Таблица].[данные])=5
Вопрос: Как сделать выборку данных из разных строк однойт аблицы?

Добрый день! Помогите советом: есть таблица в БД, в которой содержится история обработки заявок, т.е. каждая строка в таблице - это запись об одном изменении одной заявки. Заявка создана - запись в таблице, перемещена - запись в таблице, закрыта - запись в таблице. Заявок много. Как сделать выборку для отчета - т.е. взять из одной строки время перемещения, из другой - время блокировки и владельца заявки, т.е. по факту сделать выборку данных из разных строк одной таблицы, привязав это всё к номеру заявки, хранящемуся в другой таблице?
Ответ:
select номер_заявки, 
  max(case when flag='Заявка создана' then fld_datetime end) as создана,
  max(case when flag='Заявка перемещена' then fld_datetime end) as перемещена,
  max(case when flag='Заявка закрыта' then fld_datetime end) as закрыта
from есть_таблица_в_БД
group by номер_заявки
Вопрос: Выборка данных из ORACLE в PHP

Доброго дня! Подскажите как сделать выборку данных из определенной таблицы в PHP, чтобы в последующем вывести информацию на сайт. Есть много информации как сделать выборку из MySQL в PHP,но знаю что исходники кода будут разные. Киньте ссылку на материал, или подскажите где изучить информацию можно?
Ранее создавал тему где посоветовали генерацию отчета в html по средствам SQLplus, но заинтересовался возможно ли через PHP это сделать и какие подводные камни?
Ответ:
Вопрос: При выборке данных из DB2 через iSeries Access ODBC Driver дробные числа становятся целыми

Добрый день.

Собственно, проблема в том, что при выборке данных из DB2 (из таблиц, вьюшек) через iSeries Access ODBC Driver дробные числа становятся целыми, точнее дробная часть отсекается.
В тестировании участвовали 4 рабочие станции, на одной выборка нормальная, на остальных возвращаются целые части от чисел. В качестве клиента для данной операции используется Lotus Notes. Все настройки у рабочих станций: региональные ,odbc,iSeries Client Access одинаковые, от версии Windows не зависит.
Как побороть?

Заранее спасибо.
Ответ: Привет,
Скажи, пожалуйста, как решил вопрос?
Вопрос: Влияет ли удаление строки в таблице с первичным ключом на скорость выборки данных?

Влияет ли удаление строки в таблице с первичным ключом на скорость выборки данных, когда в таблице, например, очень много строк?
Может ли такое удаление вызвать дефрагментацию, не лучше ли не удалять строку, а заполнять значение ее полей (кроме первичного ключа) на NULL?

Если еще понятнее, то как влияет на выборку нарушение порядка следования первичного ключа?
Ответ: Akina, спасибо за ответ.
Вопрос: Как сделать выборку данных за сутки с 09:00 до 09:00

Здравствуйте! Я новичок-самоучка. Помогите пожалуйста!
Подскажите, как сделать выборку данных за сутки с 09:00 до 09:00 следующего дня.
Имеются поля:
 Дата
 Время выезда
 Вид выезда

Создала запрос:
Условие отбора (для поля «даты»):
Between DateAdd("d";-1; Date()) And DateAdd("d";0; Date())
Но в этом случае выводятся данные с 00:00 до 00:00 за сутки

Вводила условие отбора (для поля «время выезда»):
>#9:00:00#
Выводятся данные по времени после 09:00, но до 24:00 (00:00), а данные после 00:00 не выводит

Может кто уже сталкивался с таким вопросом и подскажет решение, заранее благодарна!
Ответ: Спасибо теперь все работает как нужно! Я очень благодарна Вам за помощь! еще раз спасибо!
Вопрос: Вопрос (можно ли сделать выборку данных из таблици EXCEL используя SQL?)

Пишу прогу по учету прихода и ухода сотрудников.
Так получилось что пришлось использовать EXCEL.
Так вот вопрос: можно ли сделать выборку данных из таблици EXCEL используя SQL?
Модератор: Топик переименован
Ответ: Спасибо

Анатолий ( Киев ),
Вопрос: Выборка данных за период по дате

Ребята помогите запросом.

есть таблица1
поля
ID int
NAME nvarchar(5)
DATE datetime


Нужно сделать выборку данных из таблица1 по полю Date, например с 01.07.2015 по 20.07.2015
Ответ:
iap
AlanDenton
SELECT *
FROM [таблица1]
WHERE [DATE] BETWEEN '20150701' AND '20150720'



неужели это сложно погуглить? Без обид.
Но это неправильный ответ. Без обид.
SELECT *
FROM [таблица1]
WHERE [DATE] >= '20150701' AND [DATE] < '20150721';

Этот вариант подходит! Спасибо!