Book Image

PostgreSQL 9.6 High Performance

By : Ibrar Ahmed, Gregory Smith
Book Image

PostgreSQL 9.6 High Performance

By: Ibrar Ahmed, Gregory Smith

Overview of this book

<p>Database administrators and developers spend years learning techniques to configure their PostgreSQL database servers for optimal performance, mostly when they encounter performance issues. Scalability and high availability of the database solution is equally important these days. This book will show you how to configure new database installations and optimize existing database server installations using PostgreSQL 9.6.</p> <p>You will start with the basic concepts of database performance, because all successful database applications are destined to eventually run into issues when scaling up their performance. You will not only learn to optimize your database and queries for optimal performance, but also detect the real performance bottlenecks using PostgreSQL tools and some external tools. Next, you will learn how to benchmark your hardware and tune your operating system. Optimize your queries against the database with the help of right indexes, and monitor every layer, ranging from hardware to queries. Moving on, you will see how connection pooling, caching, partitioning, and replication will help you handle increasing database workloads.</p> <p>Achieving high database performance is not easy, but you can learn it by using the right guide—PostgreSQL 9.6 High Performance.</p>
Table of Contents (25 chapters)
Title Page
Credits
About the Authors
About the Reviewer
www.PacktPub.com
Customer Feedback
Preface

count(*)


The count(*) is an expensive operation in PostgreSQL because of its MVCC architecture. Due to PostgreSQL's MVCC architecture, there is no straightforward way to count the rows without traversing all the rows. Here is an example where we are counting the number of rows in a table and a sequential scan is used to count the rows in an expansive way:

But in a case where the query has a restriction clause (WHERE clause), the Index Only Scan is used instead of the sequential scan. It is much faster than the sequential scan and reduces the time of count(*):