Sunday, March 28, 2010

I am in the midst of preparing for my tutorial, Realistic Load Testing, at PGCon 2010. After talking with a number of folks at my favorite IRC channel, I decided to use the Drupal 7 Project as my test case.For years, Drupal worked best with MySQL. Not that I harbor ill will against the database, it is just my experience with databases has led me to PostgreSQL as a superior engine. That said, MySQL works great for these types of applications. The types of applications we do at Digitec tend to need a much more robust solution.With Drupal 7, there has been a more concerted effort in giving PostgreSQL a chance at being a valid alternative to MySQL. The code changes and the model the Drupal development team has made have helped.My hope is that by using Drupal, I will not only give a good "real world" example application, but also give back to the Open Source community through the tests and tools that will be created for the tutorial. As Drupal 7 is still in beta development, I hope these tests can help the developers look into solutions for any problems that occur. I also hope that it will help in showing that PostgreSQL is a great fit for Drupal.

Friday, March 26, 2010

When looking to provide database connections under a steady (or heavy) load, you will likely need to look into a database connection pooler. There are a number of good options for PostgreSQL such as pgBouncer, pgpool-II, SQL Relay, and a few others.My personal favorite as of late is pgBouncer. Here's a few reasons why I like it:

a lightweight connection pooler--it is designed solely for pooling

low resource requirement

written with Python (a lot of our inernal apps use Python, so interoperability is great to have)

supports online restart/upgrade without dropping client connections

When setting up a pooler, you will want to have a separate server just for the pooler. Adding a pooler to the same server as the database only degrades the performance of PostgreSQL, so make sure you don't.

I use Debian as my choice of Linux distro. Unfortunately, there isn't an official package to install on Lenny. However, thanks to good ol' backports, we can find an up-to-date package. First things first, add backports to your /etc/apt/sources.list by adding the following source:deb http://www.backports.org/debian lenny-backports main contrib non-free

Saturday, March 6, 2010

EXPLAIN ANALYZE is a useful tool to help see what query plan the planner creates for any query. One tool that I have found useful for some time is depesz's online tool, http://explain.depesz.com/. Simply "paste your explain analyze plan, and see the output."

We have been trying out both PgBouncer and pgpool II for connection pooling in front of our Postgresql database servers. One of the issues we are trying to tackle is how to make PgBouncer HA (High Availability) and if it matters.pgpool II already has the ability to be HA using pgpool-HA, but pgpool is also a more featureful application that does much more than simple connection pooling.On the other hand, PgBouncer is a nice, lightweight connection pooler that we have found to fit the bill rather well. Our question is, if we have auto-failover set up in our private cloud for PgBouncer, is there a need to be HA? What would need to be done? If we forgo making the pooler HA, what risks do we pose?All these and other questions are going through my head. Any suggestions?

Thursday, March 4, 2010

I have been using pgBouncer for a while and have run into a need in our development server to drop and recreate a database. I have had issues in the past with trying to PAUSE, but that ends up stopping all connections, which isn't always a feasible option. I have found that simply commenting out the database in question in the pgbouncer.ini file and simply doing a RELOAD. This will also kill any clients currently connected to that database and allow you to drop/recreate. After making changes, simply uncomment and RELOAD again.

Friday, February 26, 2010

I just got word that I will be speaking at PGCon 2010. PGCon is a PostgreSQL Conference for Users and Developers held May 20-21, 2010 at University of Ottawa, with two days of Tutorials on May 18-19, 2010.

I will be leading a tutorial on Realistic Load Testing:

Applications and databases need testing. But how can you get valid results for a fully integrated system Flight-Check test at realistic loads? This tutorial addresses the many challenges that arise in an application or database development to give confidence to you and your customers in presenting a production-ready product.

After running into many obstacles in proving a recent enterprise product launch could handle the expected loads of our customers, Digitec, Inc. invested time in writing realistic Flight-Check tests using PostgreSQL functions and Python. The results of these tests gave confidence to the engineers, developers, and our customers that the entire system would be able to perform as designed.

Topics covered during this tutorial include:

Shortfalls of FLOSS benchmark tests

Identifying the Project Test Components

Identifying Realistic Loads

Identifying Historical Data

Developing Tests and Procedures

PostgreSQL Functions for Tests

Python Scripts for Tests

Helpful Tools

PGCon is the place to meet, discuss, build relationships, learn valuable insights, and generally chat about the work you are doing with PostgreSQL. If you want to learn why so many people are moving to PostgreSQL, PGCon will be the place to find out why. Whether you are a casual user or you've been working with PostgreSQL for years, PGCon will have something for you.

Come join me and many others and maybe we can hang out. I look forward to seeing many of my IRC friends there!