[oracle DB] догадаться, почему тупит таблица

kill-still

есть простой запрос типа
SELECT param1, param3, param4 FROM my_table
присасываюсь к БД через JDBC, пытаюсь получить данные.
И эта таблица какая-то особенная - из неё данные туго очень идут (всего лишь 1.9к в секунду, при том, что по идее должны быть десятки тысяч)
DDL таблицы:

CREATE TABLE MY_SCHEMA.MY_TABLE
(
PARAM1 NUMBER,
PARAM2 NUMBER,
PARAM3 VARCHAR2(100 BYTE
PARAM4 NUMBER,
PARAM5 NUMBER,
PARAM6 VARCHAR2(100 BYTE)
)
SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE

LOGGING TABLESPACE "XXXXXAPI" PCTFREE 10 INITRANS 1 STORAGE
(
INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 BUFFER_POOL DEFAULT
)
CREATE UNIQUE INDEX MY_SCHEMA.IDX_COMP ON MY_SCHEMA.MY_TABLE
(
PARAM1 ASC,
PARAM2 ASC
)
LOGGING TABLESPACE "XXXXXAPI" PCTFREE 10 INITRANS 2 STORAGE
(
INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 BUFFER_POOL DEFAULT
)

чем она такая особенная? :(

Marinavo_0507

может фрагментировалось?

kill-still

Хм, сейчас попробую проверить (хотя хз как я это буду делать с доступом только на чтение).
А ты случайно не помнишь названия для двух настроек таблицы:
- задание поля, в порядке по которому будут лежать записи на диске (для ускорения запросов ORDER BY по этому полю и BETWEEN)
- задания промежутков в этом порядке (чтобы не переписывать пол таблицы при инсёрте в середину)

kill-still

Спасибо большое за наводку, действительно, печалька:

SELECT ROUNDBLOCKS*8)/1024) AS "Total Size, Mb",
ROUND(NUM_ROWS*AVG_ROW_LEN/1024/1024) AS "Real Size, Mb"
FROM SYS.ALL_TABLES
WHERE TABLE_NAME='MY_TABLE';


Total Size, Mb Real Size, Mb
1275 237

mbolik1

- задание поля, в порядке по которому будут лежать записи на диске (для ускорения запросов ORDER BY по этому полю и BETWEEN)
Это тебе нужны Index-organized Table или Index Cluster

stm5643616

Сделай
alter table my_table move;
(это сожмёт таблицу)
и повтори свой запрос, выдающий
Total Size, Mb и Real Size, Mb
Проверь, не insert-ятся ли в нее данные с хинтом /*+ append*/. Если да, то убери.
Оставить комментарий
Имя или ник:
Комментарий: