Skip to content

Commit 5a543e4

Browse files
authoredMar 5, 2017
Merge pull request #4209 from nyalldawson/postgres_queue_size2
Dynamically adjust postgres feature queue size
2 parents 9a747de + fbe4be8 commit 5a543e4

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,15 +22,12 @@
2222
#include "qgsmessagelog.h"
2323
#include "qgssettings.h"
2424

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

27-
28-
const int QgsPostgresFeatureIterator::FEATURE_QUEUE_SIZE = 2000;
29-
30-
3128
QgsPostgresFeatureIterator::QgsPostgresFeatureIterator( QgsPostgresFeatureSource *source, bool ownSource, const QgsFeatureRequest &request )
3229
: QgsAbstractFeatureIteratorFromSource<QgsPostgresFeatureSource>( source, ownSource, request )
33-
, mFeatureQueueSize( FEATURE_QUEUE_SIZE )
30+
, mFeatureQueueSize( 1 )
3431
, mFetched( 0 )
3532
, mFetchGeometry( false )
3633
, mExpressionCompiled( false )
@@ -223,6 +220,9 @@ bool QgsPostgresFeatureIterator::fetchFeature( QgsFeature &feature )
223220

224221
if ( mFeatureQueue.empty() && !mLastFetch )
225222
{
223+
QElapsedTimer timer;
224+
timer.start();
225+
226226
QString fetch = QStringLiteral( "FETCH FORWARD %1 FROM %2" ).arg( mFeatureQueueSize ).arg( mCursorName );
227227
QgsDebugMsgLevel( QString( "fetching %1 features." ).arg( mFeatureQueueSize ), 4 );
228228

@@ -258,6 +258,15 @@ bool QgsPostgresFeatureIterator::fetchFeature( QgsFeature &feature )
258258
} // for each row in queue
259259
}
260260
unlock();
261+
262+
if ( timer.elapsed() > 500 && mFeatureQueueSize > 1 )
263+
{
264+
mFeatureQueueSize /= 2;
265+
}
266+
else if ( timer.elapsed() < 50 && mFeatureQueueSize < 10000 )
267+
{
268+
mFeatureQueueSize *= 2;
269+
}
261270
}
262271

263272
if ( mFeatureQueue.empty() )

‎src/providers/postgres/qgspostgresfeatureiterator.h

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

111111
bool mIsTransactionConnection;
112112

113-
static const int FEATURE_QUEUE_SIZE;
114-
115113
private:
116114
virtual bool providerCanSimplify( QgsSimplifyMethod::MethodType methodType ) const override;
117115

0 commit comments

Comments
 (0)
Please sign in to comment.