Skip to content

Commit 43e53d5

Browse files
authoredMar 5, 2017
Merge pull request #4222 from nyalldawson/postgres_queue_218
Dynamically adjust postgres feature queue size (backport)
2 parents d79bb3a + 37a7a22 commit 43e53d5

File tree

2 files changed

+14
-7
lines changed

2 files changed

+14
-7
lines changed
 

‎src/providers/postgres/qgspostgresfeatureiterator.cpp

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,13 @@
2222
#include "qgslogger.h"
2323
#include "qgsmessagelog.h"
2424

25+
#include <QElapsedTimer>
2526
#include <QObject>
2627
#include <QSettings>
2728

28-
29-
const int QgsPostgresFeatureIterator::sFeatureQueueSize = 2000;
30-
31-
3229
QgsPostgresFeatureIterator::QgsPostgresFeatureIterator( QgsPostgresFeatureSource* source, bool ownSource, const QgsFeatureRequest& request )
3330
: QgsAbstractFeatureIteratorFromSource<QgsPostgresFeatureSource>( source, ownSource, request )
34-
, mFeatureQueueSize( sFeatureQueueSize )
31+
, mFeatureQueueSize( 1 )
3532
, mFetched( 0 )
3633
, mFetchGeometry( false )
3734
, mExpressionCompiled( false )
@@ -227,6 +224,9 @@ bool QgsPostgresFeatureIterator::fetchFeature( QgsFeature& feature )
227224

228225
if ( mFeatureQueue.empty() && !mLastFetch )
229226
{
227+
QElapsedTimer timer;
228+
timer.start();
229+
230230
QString fetch = QString( "FETCH FORWARD %1 FROM %2" ).arg( mFeatureQueueSize ).arg( mCursorName );
231231
QgsDebugMsgLevel( QString( "fetching %1 features." ).arg( mFeatureQueueSize ), 4 );
232232

@@ -262,6 +262,15 @@ bool QgsPostgresFeatureIterator::fetchFeature( QgsFeature& feature )
262262
} // for each row in queue
263263
}
264264
unlock();
265+
266+
if ( timer.elapsed() > 500 && mFeatureQueueSize > 1 )
267+
{
268+
mFeatureQueueSize /= 2;
269+
}
270+
else if ( timer.elapsed() < 50 && mFeatureQueueSize < 10000 )
271+
{
272+
mFeatureQueueSize *= 2;
273+
}
265274
}
266275

267276
if ( mFeatureQueue.empty() )

‎src/providers/postgres/qgspostgresfeatureiterator.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,6 @@ class QgsPostgresFeatureIterator : public QgsAbstractFeatureIteratorFromSource<Q
118118

119119
bool mIsTransactionConnection;
120120

121-
static const int sFeatureQueueSize;
122-
123121
private:
124122
//! returns whether the iterator supports simplify geometries on provider side
125123
virtual bool providerCanSimplify( QgsSimplifyMethod::MethodType methodType ) const override;

0 commit comments

Comments
 (0)
Please sign in to comment.