Решил провести тестирование работы 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 раз больше памяти. (или я чего-то недопонимаю).
Т.О. видно, что мощность процессора играет важную роль в скорости выполнения запросов, особенно при операции вставке
большого количества данных.
Почему-то не задействованы остальные ядра процессора (ну там небольшая загрузка была - но можно предположить, что это
были все остальные процессы).
Интересно, возможно-ли задействовать остальные ядра процессора под выполнение запросов и на сколько тогда увеличиться
скорость выполнения данных операций.
У кого есть коментарии по этому поводу милости прошу поделитесь. Будет интересно узнать.
С Уважением, Дмитрий.