Вопрос по oci_set_prefetch

arhip

Новичок
Вопрос по oci_set_prefetch

Была у меня на дняю дискуссия на работе и так случилось, что я полез в php/ext/oci8/oci8.c. Мало что я там понял, если чесно.

Понял только то, что есть OCI-функция OCIAttrSet(). С помощью нее можно устанавливать 2 атрибута (в данном контексте): OCI_ATTR_PREFETCH_ROWS и OCI_ATTR_PREFETCH_MEMORY.

В доке по OCI написано:
When both of these attributes are set, the OCI prefetches rows up to the OCI_ATTR_PREFETCH_ROWS limit unless the OCI_ATTR_PREFETCH_MEMORY limit is reached, in which case the OCI returns as many rows as will fit in a buffer of size OCI_ATTR_PREFETCH_MEMORY.

В oci8.c функция oci_setprefetch принимает size, который по доке обозначает кол-во строк. В теле идет вначале установка параметра OCI_ATTR_PREFETCH_MEMORY размером size*1024, а затем OCI_ATTR_PREFETCH_ROWS размером size.


И, наконец, вопрос: почему при установке OCI_ATTR_PREFETCH_MEMORY мы умножаем кол-во строк именно на 1024? Может быть нужно оставить только OCI_ATTR_PREFETCH_ROWS?

Я так понимаю, что вопрос адресован tony2001.
 

tony2001

TeaM PHPClub
а в чем вопрос-то?

есть изначальное предположение, что мы имеем дело с таблицей, в которой строки занимают менее 1K.
при учете того, что 1K*1024 == 1M, мы выделяем ровно 1М на клиенте для предполагаемого result set.
по-моему, это достаточно большое кол-во памяти, чтобы его не превышать.

т.е. да, в данном случае мы не получаем от функции именно то, что хотели - вроде бы, заказали, скажем, 1000 строк, а получили только 10.
но надо учитывать, что при prefetch 1000-и строк мы бы отняли 100 метров памяти у клиента, что, естественно, достаточно сильно влияет на его работу.
возможно, документацию стоит поправить.
вы как думаете?
 

arhip

Новичок
Сложно сказать.... Можно реализовать 2 функции или добавить в существующую параметр чего собственно будем устанавливать. Или оставить как есть, но подправить документацию.

Я это - не настоящий сварщик :)))

Думаю, нужно сделать последнее, т.е. подправить документацию.
 

arhip

Новичок
А :)

Вопрос был: зачем устанавливаются 2 атрибута, а не только атрибут по кол-ву строк, как это написанно в доке по ПХП.
 
Сверху