Keep an eye on your MongoDB

I don’t use MongoDB that often, but sometimes it is the perfect tool for a job.

I have one database with about 2 million documents in the main collection. We needed to rebuild and reprocess the documents in the collection recently – essentially emptying the collection and letting it rebuild naturally as new data came in.

After a while I started to notice some severe performance issues on the server as the collection grew. Mongo was consuming vast amounts of CPU. Eventually the penny dropped. After the update, the new indexes had not been created.

As soon as the indexes were added, the amount of resource used by Mongo dropped back to an almost irrelevant level. I am astonished as the performance difference they made.

Not a mistake to make again!

phpize error on RHEL server

Trying to install the MongoDB PHP driver using Pecl (as per the documentation) on a Rackspace managed server running RHEL I ran into the following problem:

pecl install mongo

/usr/bin/phpize: /tmp/tmpNW0rIa/mongo-1.2.12/build/shtool: /bin/sh: bad interpreter: Permission denied
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

ERROR: `phpize' failed

It took me a while to remember and then search through old tickets, but the problem is that on Rackspace’s RHEL servers the /tmp partition is mounted without script execute permissions. (Is this standard for RHEL in general?)

Pecl uses the /tmp – and so therefore, the install fails.

The solution is to temporarily allow script execution in /tmp

[root@server ~]# mount | grep /tmp
/dev/sda2 on /tmp type ext3 (rw,noexec,nosuid,nodev)

[root@server ~]# mount -o remount,exec /tmp

[root@server ~]# mount | grep /tmp
/dev/sda2 on /tmp type ext3 (rw,nosuid,nodev)

Install the MongoDB driver with Pecl…

[root@server ~]# pecl install mongo

Revert the permissions on /tmp and then check the permissions are correct…

[root@server ~]# mount -o remount,noexec /tmp

[root@server ~]# mount | grep /tmp
/dev/sda2 on /tmp type ext3 (rw,noexec,nosuid,nodev)