mirror of
https://github.com/nextcloud/server.git
synced 2026-06-09 16:50:55 -04:00
Merge pull request #60930 from nextcloud/test/noid/user-ldap-large-annotation
perf(user_ldap): chunk oracle queries for lower bind cost
This commit is contained in:
commit
e1dfbb20a9
2 changed files with 8 additions and 2 deletions
|
|
@ -290,7 +290,13 @@ abstract class AbstractMapping {
|
|||
public function getListOfIdsByDn(array $fdns): array {
|
||||
$totalDBParamLimit = 65000;
|
||||
$sliceSize = 1000;
|
||||
$maxSlices = $this->dbc->getDatabaseProvider() === IDBConnection::PLATFORM_SQLITE ? 9 : $totalDBParamLimit / $sliceSize;
|
||||
// SQLite's variable limit is very low; Oracle's OCI8 driver has high per-bind overhead,
|
||||
// making large parameter lists (65k) extremely slow — use smaller batches for both.
|
||||
$maxSlices = match ($this->dbc->getDatabaseProvider()) {
|
||||
IDBConnection::PLATFORM_SQLITE => 9,
|
||||
IDBConnection::PLATFORM_ORACLE => 5,
|
||||
default => $totalDBParamLimit / $sliceSize,
|
||||
};
|
||||
$results = [];
|
||||
|
||||
$slice = 1;
|
||||
|
|
|
|||
|
|
@ -284,7 +284,7 @@ abstract class AbstractMappingTestCase extends \Test\TestCase {
|
|||
[$mapper,] = $this->initTest();
|
||||
|
||||
$listOfDNs = [];
|
||||
// List size exceeds the implementation's 65000-parameter chunk limit, forcing multiple chunked queries
|
||||
// List size exceeds any single-query chunk limit (65k for most DBs, 9k for SQLite, 5k for Oracle), forcing multiple chunked queries
|
||||
for ($i = 0; $i < 66640; $i++) {
|
||||
$name = 'as_' . $i;
|
||||
$dn = 'uid=' . $name . ',dc=example,dc=org';
|
||||
|
|
|
|||
Loading…
Reference in a new issue