Angelo's Soapbox

Monday Oct 26, 2009

A DTrace Quick Start Guide

Alta Elsta & I just completed the DTrace Quick Start Guide: Observing Native and Web Applications in Production mini-book. If you need a hardcopy let me know but if you are like me and would love to save a few trees you can click on the picture below to download the pdf version.

We talk about why DTrace is so different from any observation tools you may have seen. We cover basic DTrace concepts and some details on writing d-scripts. We also have a lot of sample scripts. Sections on using DTrace to observe MySQL and Drupal are included.

The examples from the book have also been added to a wiki page for easier copy & paste.

(click the image to open PDF)

ZFS Webcast - Changing the way you look at storage

Last week Mark Niedzielski from OurStage and I did a webcast about ZFS. We cover some very basics of ZFS. There is good info on its storage management capabilities and filesystem and volume capabilities. We even look at hybrid storage, benefits of snapshots and some tuning hints as well.

If you missed the webcast here is a link to get to the recording & Slide deck.

Slides - CLICK HERE
Recording - CLICK HERE

Link to Other webinars - CLICK HERE

Please let me know if you need more details on ZFS or on these webinars

Thursday Sep 03, 2009

Recording: "ZFS + SSD tuning for databases"

Just in case you missed the live event, we have a recording of the ZFS + SSD for databases webcast Listen Now

You can also download the slides from Slide share. Download Slides

Tuesday Aug 25, 2009

ZFS & SSDs. Database Performance tuning webcast

Over the last month I have been working on a ZFS Tuning for Databases presentation. I'll be presenting it live tomorrow 8/26/09 at 8 AM PST.

This based on a lot of work done at Sun as well as in the community. With the massive adoption of Solid State Devices (SSDs) (thank you iPOD) the storage market just got a whole lot more interesting. Incorporating SSDs into a ZFS pool is a breeze. This presentation is meant to help you get the best out of the ZFS + SSD combination for databases. We look into Postgres, MySQL and Oracle. I also provide a quick into into Sun's unified storage 7000 series systems.

If you are interested do Register Now

Wednesday Jun 17, 2009

Diving into the Depths of Drupal with DTrace

I recently presented DTrace at Sun's CommunityONE event. My presentation was focused on observing drupal using DTrace. You can see a replay of the presentation here. You can get the presentation here as well.

If you are an AMP (Apache MySQL PHP) stack user on Solaris/OpenSolaris you can benefit from DTrace. Here is a D-Script that will print the load distribution on your system. Think of it as "AMP-top" if you may! This was tested on OpenSolaris 2009.06

#!/usr/sbin/dtrace -qs

BEGIN
{
	total=mysqlcnt=httpcnt=phpcnt=javacnt=ffxcnt=othercnt=0;
	printf("%10s %10s %10s %10s %10s %10s\n","% MYSQL","% APACHE","% FIREFOX","% PHP","% Java","% OTHER");
}

php*:::request-startup
{
	inphp[pid,tid]=1;
}

php*:::request-shutdown
{
	inphp[pid,tid]=0;
}

profile-1001
{
	total++;
	(execname=="mysqld")?mysqlcnt++:\
	     (execname=="httpd")?(inphp[pid,tid]==1?phpcnt++:httpcnt++):\
	     (execname=="java")?javacnt++:\
	     (execname=="firefox-bin")?ffxcnt++:othercnt++;
}

	

tick-30s
{
	printf("%10s %10s %10s %10s %10s %10s\n","% MYSQL","% APACHE","% FIREFOX","% PHP","% Java","% OTHER");
}

tick-2s
{
	printf("%10d %10d %10d %10d %10d %10d\n",mysqlcnt*100/total,\
              httpcnt*100/total,ffxcnt*100/total, phpcnt*100/total,\
              javacnt*100/total,othercnt*100/total);
	total=mysqlcnt=httpcnt=phpcnt=ffxcnt=javacnt=othercnt=0;

}

I will post other scripts soon. I plan to twitter these scripts as well. Follow me on twitter

Saturday Apr 25, 2009

DTrace presentation in JSconf 2009 Slides

I had an excellent time at JavaScript conference in DC this weekend. Some real smart guys in the room! Very impressive to see how far JavaScript has come! Interestingly many folks knew about DTrace! Here are my slides for the DTrace talk at JSconf 2009

Wednesday Apr 08, 2009

A drupal Aha moment, brought to you by Sun Unified Storage

Have you wondered what exactly an application is doing to your storage subsystem. Now you no longer have to wonder, you can find out exactly what its doing. Recently I was introduced to drupal and for DrupalCon I set up a BOF and demonstrated the use of Sun's Unified storage to observe Drupal. Yesterday I did a screen cast of the demo. You can see it @ "A drupal aha moment, brought to you by Sun's Unified Storage"

You can get one of the Unified storage systems to try out using Sun's Try & Buy Program. Or download a vmware appliance that simulates the Unified Storage.

Monday Jan 12, 2009

Mounting Amazon S3 buckets as a file system on OpenSolaris

Happy New Year.

Recently, I have been trying to make Amazon S3 buckets more "accessible" on my OpenSolaris system. My goal was to "mount" an S3 bucket as a filesystem on OpenSolaris.

I came upon s3fs a filesystem in userspace (FUSE) that uses the Amazon S3 as its data store. Last week I spent a few minutes building s3fs on OpenSolaris.Here are the step by step instructions.

Summary Instructions


Details
  • Building fusefs & libfuse on OpenSolaris
    Install needed pkgs

    Download, build and install Open Solaris version of fusefs and libfuse
    • hg clone ssh://anon@hg.dot.opensolaris.org/hg/fuse/fusefs
    • hg clone ssh://anon@hg.dot.opensolaris.org/hg/fuse/libfuse
    • Read the INSTALL doc for instructions on building and installing fusefs. Here are a few Gotcha's.
      • Make sure to use make and not gmake
      • Add /opt/onbld/bin/i386 to the path
      • cd into fusefs/kernel
      • make
      • make pkg
      • pfexec pkgadd -d packages SUNWfusefs
      • pfexec bootadm update-archive
      • reboot
    • Read the INSTALL doc for instructions on building and installing libfuse.
      • cd libfuse
      • make install
      • make pkg
      • pkgadd -d packages SUNWlibfuse

  • Download and build s3fs

  • Using s3fs
    • First make sure you have an AWS account.
    • Create or reuse an S3 bucket you already have. another-s3-bash is an excellent tool for this purpose. It works well on OpenSolaris. The rest of the instructios assume that you are using another-s3-bash
    • Set up env variables for another-s3-bash
      • export S3_ACCESS_KEY_ID="your access key"
      • echo -n "your secret key" > secret-key.txt
      • export S3_SECRET_ACCESS_KEY=secret-key.txt
    • Create a bucket on S3
      • s3 put fusebucket
    • Put something in the fusebucket
      • echo "Hello S3 World" > /tmp/hello
      • s3 put fusebucket:hello /tmp/hello
    • Mount the S3 bucket
      • s3fs fusebucket /mnt
    • Use it
      • cd /mnt
      • You can do normal filesystem operations like, ls, cp, mv chmod etc
    • s3fs logs everything using syslog. So if you need to see messages look at /var/adm/messages

Hope this helped. Let me know if you have issues. More to come on this front.

Friday Oct 24, 2008

Optimizing the DTrace logger for MySQL queries

The Data Charmer Giuseppe Maxia did some quick tests on the DTrace script and was wondering if I could optimize it a little.

One issue with the old script is that it prints every SQL statement and this can be pretty expensive. This can be minimized by printing to a file. Here is a script that will do just that. The freopen() is not documented but it opens a file and sends all prints to the file. Giuseppe reports a 30% improvement in logging performance with this improved script.


#!/usr/sbin/dtrace -qws
BEGIN
{
	freopen("/tmp/sqls");
}

pid$1::*dispatch_command*:entry
{
	printf("%d::%s\n",tid,copyinstr(arg2));
}

One more optimization that you can use with DTrace is the use of aggregates. Aggregates provides summary information. So this script will not provide you with the running log but if performance of the logger is important and you can live with the summary then this is the script for you.

#!/usr/sbin/dtrace -qs 
pid$1::*dispatch_command*:entry 
{ 
	@[copyinstr(arg2)]=count(); 
}

Strings in DTrace are 256 bytes by default. So these scripts will only show the first 256 chars of the SQL. If you need more then just change the default. Here is the script.

#!/usr/sbin/dtrace -qws
#pragma D option strsize=1024

BEGIN
{
	freopen("/tmp/sqls");
}

pid$1::*dispatch_command*:entry
{
	printf("%d::%s\n",tid,copyinstr(arg2));
}

Finally, DTrace does the printing/aggregating asynchronously, so the performance of DTrace logging should be better than the typical database logging, at least on a system with enough free cycles.

PS: For those trying out the oracle SQL statements I found a better script than mine here

Friday Oct 17, 2008

Response: DTrace MySQL & SQL statement

A lot of comments on my last blog. Here is my response

How can I get more details for each SQL statement?
The second argument to dispatch_command is a pointer to the THD structure. It contains all sorts of information. You can dig for all the info you may ever need. Only issue is that we are now dealing with the internal structures and these may change for every release. So the script will not be portable. When I get a few minutes I'd blog a sample but your millage may vary.
A better way to get these structures is using the embedded MySQL DTrace probes. These will expose the info you need. For details on the embedded DTrace probes and example scripts on how to get these details see the discussion thread on OpenSolaris DTrace Discuss Finally the tid was printed to give you some amount of isolation based on connections. Not a great solution but good enough in most cases.

Why not just use MySQLProxy?
Because you need to turn it on and restart your mysql instance. With DTrace this process is truly dynamic. But as Kay Röpke explains, in MySQL 5.1 you can turn on query logging on the fly. DTrace of course can be used for many other things, not just query logging. Stay tuned for more to come in my blog

Can I do this for Oracle?
Of course you can. Its just another process as far as Solaris and DTrace are concerned. Here is a simple script that will print the SQL statements for Oracle. The function name is sqlcxt() the third argument is a pointer to the sqlexd structure. Search the web for the definition of the structure for your version of Oracle. Put it in a include file Oracle.h Then copy and run this script


#!/usr/sbin/dtrace -Cs
#include "oracle.h"
pid$1::sqlcxt:entry {

        this->s = (struct sqlexd *) copyin(arg2,sizeof(struct sqlexd));
        self->query = copyinstr((uintptr_t)this->s->stmt);
        printf("%s: %s\n",execname, self->query);
}

Why can't I do this in Linux? Is Sun making Linux the second choice
Kay already provided a very good response. I just want to point one more things. You can use Solaris Branded Zones to run DTrace on a Linux Application. See for details.
Not only are we not treating Linux as a second class citizen we have gone out of the way to help out our friends in the Linux community even though they have been reluctant in getting DTrace ported.

Thursday Oct 16, 2008

Using DTrace to observe the SQL statements on a live running MySQL database

DTrace allows you to instrument any live running application in production without the need of extra coding, application recompile or even an application restart. All you need is that the application is running on an OS that supports DTrace. Today Solaris, OpenSolaris, OS X and FreeBSD are a few that have DTrace built in.

For example here is a D-script that instrument MySQL to observe the SQL statements that is being executed in production. Just a 3 line script like this can be extremely useful to observe a live MySQL database


#!/usr/sbin/dtrace -qs
pid$1::*dispatch_command*:entry
{
    printf("%d::%s\n",tid,copyinstr(arg2));
}
You need to pass the pid of the mysql process as the first argument to this script.

Here is a sample output from the script. We are observing the SQL statements that are executed to bring up the SugarCRM login screen.


# pgrep mysql
418
254
# ./mysql.d 418
11::sugarcrm
11::SET CHARACTER SET utf8
11::SET NAMES 'utf8'
11::SELECT id, name, symbol, conversion_rate FROM currencies WHERE
status = 'Active' and deleted = 0
11::SELECT category, name, value FROM config
11::SELECT id FROM outbound_email WHERE type = 'system'
11::SELECT * FROM outbound_email WHERE id =
'592d612d-3fd2-fa02-f067-48d0467e2da0'
11::
12::sugarcrm
12::SET CHARACTER SET utf8
12::SET NAMES 'utf8'
12::SELECT id, name, symbol, conversion_rate FROM currencies WHERE
status = 'Active' and deleted = 0
12::SELECT category, name, value FROM config
12::SELECT id FROM outbound_email WHERE type = 'system'
12::SELECT * FROM outbound_email WHERE id =
'592d612d-3fd2-fa02-f067-48d0467e2da0'
12::SELECT acl_actions .*, acl_roles_actions.access_override
                   FROM acl_actions
                   LEFT JOIN acl_roles_users ON
acl_roles_users.user_id = '' AND  acl_roles_users.deleted = 0
                   LEFT JOIN acl_roles_actions
12::SELECT count(*) as the_count FROM config WHERE category='info' AND
name='sugar_version' AND value = '5.1.0'
12::SELECT category, name, value FROM config
12::SELECT id FROM outbound_email WHERE type = 'system'
12::SELECT * FROM outbound_email WHERE id =
'592d612d-3fd2-fa02-f067-48d0467e2da0'
12::INSERT INTO tracker
(monitor_id,module_name,date_modified,action,session_id ) VALUES (
'97e1d39b-c036-1e1f-bf2f-48f763a6045c','Users','2008-10-16
15:53:13','login','8fbb9c1a0ac421964fa4a45db4086a46')
12::SELECT user_name FROM users WHERE id='1'

Please note you do not need anything special from MySQL. This will run with any plain vanilla mysql instance with no restart or special flags

How does the script work
We are using the pid provider in DTrace to instrument the dispatch_command method of the live running MySQL instance. This is the method that is called when any SQL statement is executed. The third argument for this method is a string that contains the SQL statement. We are just printing the third argument in the D-script

As always let me know if you need more details

Friday Oct 03, 2008

Using DTrace to change OS version

You may have heard about Solaris' legendary binary compatibility guarantee. Basically we guarantee that any binary that runs on Solaris 7,8 & 9 will run unmodified on Solaris 10.

In spite of this excellent binary compatability we have seen some of our partner's Solaris 9 apps fail to install on Solaris 10 because the installer thinks that "10" is less than "9" (using ASCII compare). I figured that we can use DTrace to fix the version number to allow the installer to work.

So I wrote a simple script that will fix the version of Solaris. Here is the script

#!/usr/sbin/dtrace -qws
	
syscall::uname:entry
/progenyof($1)/
{
	self->addr = arg0;
}

syscall::uname:return
/progenyof($1)/
{
	copyoutstr("5.9", self->addr+(257*2), 257);
}

This script takes the pid of the shell that runs the installer. (echo $$ on the terminal to get the pid) While this script is running, uname -a on that shell will return 5.9 as a the Solaris version.

One Year Free hosting for Glassfish developers


You may have heard that There Ain't No Such Thing As A Free Lunch.[TANSTAAFL]

The Sun's Startup Essentials Program is changing all that with the help of our partner LayeredTech. They are offering one year of free hosting for the glassfish developer community. Click here to apply.

Alex De Marco a happy user of this offer has written up a good getting started guide. Enjoy!

Wednesday Oct 01, 2008

Proud to work for Sun

I have a new role at Sun. I'm a Technical Evangelist in the Sun Startup Essentials team. This is a dedicated team at Sun that helps interesting new startups navigate the complicated world of Web 2.0 technology and funding. If you are a Startup you need to apply to become part of this program. We provide some excellent benefits.

I was at the Hatchery Event in NY last week. I met some wonder folks there and had a great time.

Lynn Brewer is the the real Enron whistleblower. She is the founder of the The Integrity Institute As the name suggest they provide Advanced Corporate Performance Analytics with more than just financials as the basis. She presented her vision during the event and I had an opportunity to talk with her after the event. She mentioned that Sun is among the best in the industry in her integrity rating. Wow! I felt so proud to be part of such a company in these days when we hear of so many scandals.

I also met Jonathan Askin who is the Director of Brooklyn Law School for Incubator & Policy Clinic. He also confirmed that Sun almost always is on the right side on the policy issues. Yes, I do work for a company that not only "Does no evil" but also wants to "Do good" for the right reasons.

Wednesday Sep 17, 2008

Web 2.0 Expo NY

Hello from the demo floor of the Web 2.0 Expo in New York

It has been a lot of fun getting to meet with a lot of Web 2.0 companies. It blows my mind to just see how much this market has matured.

If you are at the Web 2.0 Expo NY please stop at the Sun booth. Tell them Angelo sent you and get a nice OpenSolaris cap or T-shirt.

Come by my BOF on Observing the Web 2.0 Application in Production September 9/18/08 Thursday 7 PM at "Boardroom C-Hudson Hotel". We will have an interactive session. So would love to hear your ideas and feeback.

Also check out Project Kenai and Zembly at the Sun booth.

If you are a startup. The SSE program is just the thing for you. See Sun Startup Essentials

Come by booth 1701


Archives
Links
Referrers