Тестирование производительности InterBase

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Дмитрий Б.
Сообщения: 56
Зарегистрирован: 05 дек 2007, 18:09

Тестирование производительности InterBase

Сообщение Дмитрий Б. » 05 янв 2012, 19:07

Здраствуйте.

Решил провести тестирование работы Interbase на различных компьтерах разной конфигурации.

ПК№1
CPU: Intel i5 (2.8 GHz)
RAM: 4 Gb DDR3
HDD: 1 Tb
...
OS: Windows 7 Ultimate 64 bit
InterBase: 7.0 (WI-V7.0.0.206)

ПК№2
Pentium 4 (2.4 GHz)
512 Mb DDR1
80 Gb
...
Windows XP Home Edition
7.0 (WI-V7.0.0.206)

Файл БД TEST.GDB
Скрипт

Код: Выделить всё

 
/****              Generated by IBExpert 05.01.2012 16:02:48               ****/
SET SQL DIALECT 3;
SET NAMES WIN1251;

CREATE TABLE TB_PRICE (
    COMP_NAME  VARCHAR(50) COLLATE PXW_CYRL,
    NUMB       VARCHAR(50) COLLATE PXW_CYRL,
    NAME       VARCHAR(200) COLLATE PXW_CYRL,
    MARKA      VARCHAR(15) COLLATE PXW_CYRL,
    MODEL      VARCHAR(15) COLLATE PXW_CYRL,
    MN_IN      VARCHAR(10) COLLATE PXW_CYRL,
    MN_ROZN    VARCHAR(10) COLLATE PXW_CYRL,
    MN_POST    VARCHAR(10) COLLATE PXW_CYRL,
    OSTAT      VARCHAR(5) COLLATE PXW_CYRL,
    UP_DATE    DATE
);


Для тестирования написал программку itest.exe (в Embarcadero RAD Studio XE2 со стандартным набором компонентов доступа
к данным), которая заполняет поля таблицу произвольными данными, выполняет запрос на выборку данных из таблицы,
подсчет количества записей в таблице, очистка таблицы. При выполнении операций производится замер их длительности.

Полученные результаты исследования

Вид операции / Кол-во записей / CPU ПК№1, % / CPU ПК№1, % / Время ПК№1 / Время ПК№2
---------------------------
count / 1 / 27 *1 / 100 / 03:53 / 15:28
count / 2 / 27 *1 / 100 / 07:40 / 26:41
count / 5 / 27 *1 / 100 / 19:15 / 1:09:17
---------------------------
generation / 1 / 34 *2 / 100 / 08:03 / 25:04
generation / 2 / 31 *2 / 100 / 07:31 / 26:32
generation / 5 / 33 *2 / 100 / 22:21 / 1:18:44
---------------------------
select / 1 /25 *1 / 99 / 00:14 / 01:33
select / 2 /25 *1 / 99 / 00:27 / 02:54
select / 5 /25 *1 / 99 / 01:37 / 08:22
---------------------------
clear / 5 / 20 / 70 / 00:27 / 05:52
---------------------------
Полная загрузка одного ядра (в данном случае 1 из 4) соответствует загрузке CPU на 25 %.
*1 - Полная загрузка одного ядра процессом ibserver.exe
*2 - Полная загрузка ядра распределилась между процессами ibserver.exe и itest.exe примерно в среднем 50/50.

P.S. Все запросы кроме "select" выполнялись при помощи IBSQL , "select" выполнялся при помощи IBDataSet.

С объемом памяти занимаемой участвующими в тестировании процессами ibserver.exe и itest.exe вообще непонятно, каким
образом выделяется.
Во время тестирования из диспетчера задач видно, что:
- на ПК№1 ibserver.exe и itest.exe заняли памяти порядка (6Mb / 2.5Mb соответственно)
- на ПК№2 ibserver.exe и itest.exe заняли памяти порядка (29Mb / 3.5Mb соответственно)
где логика - на ПК с меньшим объемом оперативной памяти ibserver.exe съел почти в 5 раз больше памяти. (или я чего-то недопонимаю).
Т.О. видно, что мощность процессора играет важную роль в скорости выполнения запросов, особенно при операции вставке
большого количества данных.
Почему-то не задействованы остальные ядра процессора (ну там небольшая загрузка была - но можно предположить, что это
были все остальные процессы).
Интересно, возможно-ли задействовать остальные ядра процессора под выполнение запросов и на сколько тогда увеличиться
скорость выполнения данных операций.

У кого есть коментарии по этому поводу милости прошу поделитесь. Будет интересно узнать.

С Уважением, Дмитрий.
Последний раз редактировалось Дмитрий Б. 01 фев 2012, 17:08, всего редактировалось 1 раз.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Тестирование производительности InterBase

Сообщение kdv » 05 янв 2012, 22:24

Почему-то не задействованы остальные ядра процессора (ну там небольшая загрузка была - но можно предположить, что это
были все остальные процессы).
потому что у InterBase (SuperServer) распараллеливаются только действия в разных коннектах. Пачку инсертов из одного коннекта распараллеливать некуда.
Вам нужно что-то по распараллеливанию почитать, чтобы было понятно, что можно распараллеливать, а что нельзя.
где логика - на ПК с меньшим объемом оперативной памяти ibserver.exe съел почти в 5 раз больше памяти.
Win 7 любой редакции для нормальной работы требуется 2 гига памяти. 512 мб для этой ОС - даже не смешно. Впрочем, и для XP 512мегабайт памяти нынче - хило даже для работы исключительно в браузере. Не говоря про СУБД.

Ответить