For the Love of AWR and ASH…

Yes, I love AWR and ASH reports when performing database detective work.  They are an essential tool in my performance tuning arsenal, along with the logs, trace files/profiling, Oracle Enterprise Manager and a suite of personally collect queries from over the years.  As complex as databases are these days, the more data that I have at hand to backup what I am tuning or reporting on, the more comfortable I am, (OK, so I’m not one for “theories”… :) )

payday loans lenders online

Just as I would not use a screw driver to hammer in a nail, all DBA’s should understand and not confuse the tools in their arsenal and when best to utilize them.

AWR and ASH reports, when licensed by the client/environment are commonly a mid-stream step I go through when trouble-shooting or analyzing an issue.  I believe that all DBA’s should understand how to perform all tasks from SQLPlus.  Being able to address issues without these “gifts from the DBA Gods” is essential, too, but when they are available, utilize them for what they are best at-  a aggregated snapshot in time of the database that can often shed light on what was going on at a high level and with some detail into the database.

Running the reports is a simple task.  From the database server, as the Oracle user, there are a number of different reports in the $ORACLE_HOME/rdbms/admin directory for both awrrpt.sql and ashrpt.sql.  Although these are the main reports, you will notice if you run:

ls awr*.sql

that there are a number of different AWR reports, but we will stick with the main ones today.

The AWR Report

Running the report is quite easy from here.  Change to a directory that you would like to write your report to and log into SQLPlus as a user with privileges to run the reports.

@$ORACLE_HOME/rdbms/admin/awrrpt.sql;

  • It will then ask you for the type of report you would prefer, text or html, enter your preference.
  • How many days of snapshot ID’s would you like to view?  Enter a number of days to go back.
  • Enter a beginning snapshot ID.
  • Enter an ending snapshot ID.
  • Enter a name for your report.  I prefer the naming method of:  <awr/ash/addm>_<sid>_<ending snapshot>.<txt/html>
  • The report will run and it will produce the output in the directory you are currently in.

Once complete, you can view the report.  The report contains the same main information at the top for almost all database environments:



WORKLOAD REPOSITORY report for
DB Name         DB Id    Instance     Inst Num Release     RAC Host
------------ ----------- ------------ -------- ----------- --- ------------
<SID>          1192134473 <Instance>         1 10.2.0.4.0  NO  <HOST>
              Snap Id      Snap Time      Sessions Curs/Sess
            --------- ------------------- -------- ---------
Begin Snap:     84745 06-Feb-11 13:30:25     1,687      44.2
  End Snap:     84747 06-Feb-11 14:30:26     1,683      44.4
   Elapsed:               60.02 (mins)
   DB Time:            1,455.64 (mins)

The above tells you what database, what type of database, database version, when the snapshots are from and how many sessions were active at the time of the snapshot.

Instance efficiency is always an important, high level indicator of the overall health of a database, inspect this quickly and ensure the percentages are within acceptable limits:

Instance Efficiency Percentages (Target 100%)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            Buffer Nowait %:   99.40       Redo NoWait %:  100.00
            Buffer  Hit   %:   97.33    In-memory Sort %:  100.00
            Library Hit   %:   99.93        Soft Parse %:   99.88
         Execute to Parse %:   86.13         Latch Hit %:   99.61
Parse CPU to Parse Elapsd %:   99.08     % Non-Parse CPU:   99.54

From here, it is most effective to move to the top five wait events to get a solid feel for what data is going to be relevant in your research:

Top 5 Timed Events                                         Avg %Total
~~~~~~~~~~~~~~~~~~                                        wait   Call
Event                                 Waits    Time (s)   (ms)   Time Wait Class
------------------------------ ------------ ----------- ------ ------ ----------
enq: TX - allocate ITL entry          9,799      28,698   2929   32.9 Configurat
db file sequential read           4,827,509      25,964      5   29.7   User I/O
read by other session             2,998,307      18,118      6   20.7   User I/O
CPU time                                          6,872           7.9
direct path read                    222,425       4,782     21    5.5   User I/O
          -------------------------------------------------------------

As the wait events are shown clearly as enq: TX on ITL, (Initial Transaction),  db file sequential read, (single block reads, most likely involving indexes) and read by other session, (concurrency/buffer busy waits) this gives us a solid foundation for our next step into the AWR report-  Segment Statistics

This section is towards the bottom of the report, but it very helpful for us to see exactly where the physical pressure is on the database.  There will be three areas we will be interested in:

  • Buffer busy waits
  • ITL Waits
  • Physical Reads
Segments by Buffer Busy Waits           DB/Inst: ORC1/ORC1  Snaps: 84745-84747
-> % of Capture shows % of Buffer Busy Waits for each top segment compared
-> with total Buffer Busy Waits for all segments captured by the Snapshot
                                                                  Buffer
           Tablespace                      Subobject  Obj.          Busy    % of
Owner         Name    Object Name            Name     Type         Waits Capture
---------- ---------- -------------------- ---------- ----- ------------ -------
USER1       USER_LG    PTBL1_DT_IDX                 INDEX        1,877   48.79
USER2       USERS      TBL2            P201102      TABLE          806   20.95
USER2       USERS      PTBL4           P201102      INDEX          443   11.52
USER1       USER_LG    PTBL1                        TABLE          260    6.76
USER2       USERS      PTBL2_AU_IDX    P201102      INDEX          206    5.35
          -------------------------------------------------------------

By reviewing the data above, we can see that almost 50% of our buffer busy waits on are the USER1.PTBL1_DT_IDX.

This will most likely show much of our db file sequential read waits and our concurrency, so this is a good object to make note of.

Segments by Physical Reads              DB/Inst: ORC1/ORC1  Snaps: 84745-84747
-> Total Physical Reads:      29,381,297
-> Captured Segments account for    34.9% of Total
           Tablespace                      Subobject  Obj.      Physical
Owner         Name    Object Name            Name     Type         Reads  %Total
---------- ---------- -------------------- ---------- ----- ------------ -------
USER1       USER_LG    TBL2                            TABLE    2,947,780   10.03
USER1       USER_LG    PTBL1                           TABLE    2,101,923    7.15
USER2       USERS      TBL_16_AUD            P201102   TABLE    1,334,319    4.54
USER2       USERS      TBL_12_AUD            P201012   TABLE      884,322    3.01
USER2       USERS      PTBL_AUD              P201012   INDEX      711,388    2.42
          -------------------------------------------------------------

We see another clue above to what we should be looking for next. The USER1.TBL2 has large physical reads on it. We should keep an eye out for statements involving the first three objects

due to the quantity of physical reads, in my opinion.

Segments by ITL Waits                   DB/Inst: ORC1/ORC1  Snaps: 84745-84747
-> % of Capture shows % of ITL waits for each top segment compared
-> with total ITL waits for all segments captured by the Snapshot
           Tablespace                      Subobject  Obj.           ITL    % of
Owner         Name    Object Name            Name     Type         Waits Capture
---------- ---------- -------------------- ---------- ----- ------------ -------
USER2       USERS      PK_PTBL1_AUD        P201102    INDEX            9   26.47
USER2       USERS      PTBL1_AUD           P201102    INDEX            7   20.59
USER2       USERS      UK_TBL16_IDX        P201102    INDEX            5   14.71
USER1       USER_LG    PK_TBL16_IDX                   INDEX            2    5.88
USER1       USER_LG    PTBL1                          TABLE            2    5.88
          -------------------------------------------------------------

The actual waits may be misleading in this report, as there are a number of partitions that might be hiding small numbers individually that are adding up together.

We can tell that we can address most of them just be changing the initial transactions on the three objects in the top of the list shown though.

We now have the data from the Segment Statistics section to now move into specific SQL reporting data.  We will use what we have gathered so far to help us zero in on the statements that can be tuned to offer

us the most “bang for the buck”.  If we want to tune to remove impact, we will be looking at what is taking the most time in the database to complete.  If we are looking for a historical culprit for a performance issue at a given time, we will then be looking for a similar issue, but not take the secondary steps of categorizing complexity of resolution unless we are going to address it.

In the elapsed time is the statement that goes with much of our data:

  Elapsed      CPU                  Elap per  % Total
  Time (s)   Time (s)  Executions   Exec (s)  DB Time    SQL Id
---------- ---------- ------------ ---------- ------- -------------
    29,053         54       28,705        1.0    33.3 3m3pjyfj29dpv
Module: user@hostname (TNS V1-V3)
UPDATE USER1.PTBL1 SET COL1 = :1, COL2 = :2, COL3 = :3, COL4=
 :4 where COL6=:6 and COL7= :7

The statement above involves the following from the top event waits:

  • Concurrency
  • Buffer busy waits
  • a third of the total database time
  • ITL waits

After running a quick explain plan on the SQL Statement, we realize the following-  It is using  objects from each section:

  • USER1.PTBL1 from physical reads, buffer busy waits and ITL waits.
  • In the explain plan, it uses the USER1.PTBL1_DT_IDX for the where clause in the update statement.

From this type of research, you should be able to create a top five set of statements that are causing high performance hits or were the cause of a performance degradation incident in a database that any manager or developer can appreciate, with data that can back it up.

The ASH Report

As with the AWR report, the ASH report is executed in a very similar manner from SQLPlus.  Ash is a 1 second snapshot of trace level data from the database, this can give you a very solid view of the database, especially if you do not have a snapshot ID to rely on due to an outage or need more granule data, but still are required to look historically.

From SQL Plus:

 @$ORACLE_HOME/rdbms/admin/ashrpt.sql;

  • Specify what type of report you would like, text or html.
  • The report will then request a beginning time for the report- Note just above how up to the minute the data is available to:
Latest ASH sample available:     01-Mar-11 01:57:42       <--Database in question is on GMT, (no, I'm not working in the future... :) )
[                                     0 mins in the past]
  • You are then shown an example of how to enter in time for an ASH report:
Specify the timeframe to generate the ASH report
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter begin time for report:
--    Valid input formats:
--      To specify absolute begin time:
--        [MM/DD[/YY]] HH24:MI[:SS]
--        Examples: 02/23/03 14:30:15
--                  02/23 14:30:15
--                  14:30:15
--                  14:30
--      To specify relative begin time: (start with '-' sign)
--        -[HH24:]MI
--        Examples: -1:15  (SYSDATE - 1 Hr 15 Mins)
--                  -25    (SYSDATE - 25 Mins)
  • I prefer 15 minute snapshots max,  as aggregation in these reports can miss a lot of valuable data.
  • Enter in your beginning time:

02/28/11 12:30:00

  • Put in your duration, either forward or negative in minutes, see examples above.
  • Name your report, I prefer ash_<sid>_timestamp.<txt/html>

You can then review your ASH report:

The first section will look similar for all databases:

ASH Report For <sid>/<inst>
DB Name         DB Id    Instance     Inst Num Release     RAC Host
------------ ----------- ------------ -------- ----------- --- ------------
<sid>          11921373  <inst>                1 10.2.0.4.0  NO  <host>
CPUs           SGA Size       Buffer Cache        Shared Pool    ASH Buffer Size
---- ------------------ ------------------ ------------------ ------------------
  16     47,104M (100%)    40,960M (87.0%)      4,121M (8.7%)              M (%)
          Analysis Begin Time:   28-Feb-11 12:30:00
            Analysis End Time:   28-Feb-11 13:00:00
                 Elapsed Time:        30.0 (mins)
                 Sample Count:       1,122
      Average Active Sessions:        6.23
  Avg. Active Session per CPU:        0.39
                Report Target:   None specified

The Top User Events are a solid place to view first:

Event                               Event Class     % Activity   Sessions
----------------------------------- --------------- ---------- ----------
db file sequential read             User I/O             52.67       3.28
CPU + Wait for CPU                  CPU                  25.85       1.61
db file scattered read              User I/O             15.33       0.96
          -------------------------------------------------------------

It is broken down by wait events, which allow us to look up “what” object is causing the db file sequential reads:

Event                          % Event  P1 Value, P2 Value, P3 Value % Activity
------------------------------ ------- ----------------------------- ----------
Parameter 1                Parameter 2                Parameter 3
-------------------------- -------------------------- --------------------------
db file sequential read          52.76             "2","2500882","1"       0.09
file#                      block#                     blocks
db file scattered read           15.33             "5","10380","128"       0.09
file#                      block#                     blocks

          ————————————————————-

The query to inspect the object involved in the blocks would look like this:

select
   owner,
   segment_name,
   segment_type
from
   dba_extents
where
   file_id = 2
and
  2500882 between block_id and block_id + blocks -1;
OWNER SEGMENT_NAME SEGMENT_TYPE
------------------
USER1 PTBL1        TABLE

We now know that 52% of the db file sequential reads came from this object. As this can be single block reads, not just index reads, we know we are not looking for a full table scan on this object.

It will also tell us the types of commands utilzing the database most:

Top SQL Command Types              DB/Inst: ORC1/ORC1  (Feb 28 12:30 to 13:00)
-> 'Distinct SQLIDs' is the count of the distinct number of SQLIDs
with the given SQL Command Type found over all the ASH samples
      in the analysis period
                                                 Distinct            Avg Active
SQL Command Type                             SQLIDs % Activity   Sessions
---------------------------------------- ---------- ---------- ----------
SELECT                                          111      66.49       4.14
INSERT                                           11      17.38       1.08
UPDATE                                           10       9.54       0.59
          -------------------------------------------------------------

And the exact statements that were in the “TOP”, note that it will break it down by percentage of wait type per statement. If there is more than one that the statement falls under,

it will show show each wait with percentage:

       SQL ID    Planhash % Activity Event                             % Event
------------- ----------- ---------- ------------------------------ ----------
2b4794ntzxabs  2477665643      14.62 db file scattered read              10.61
select rpad(e.COL1,:"SYS_B_0"), count(*),
 sum(b.COL_8) from TBL_89 b,TBL_65 e
 where b.COL2 in (select x.COL1 from TBL_45 x where
3mqu6p3gwmtvc         N/A       8.29 db file sequential read              8.29
INSERT INTO USER.TBL1(COL1,COL2,COL3,COL4,COL5,COL6,COL7) VALUES ( :1
, :2, :3, :4, :5, :6, :7)
a30x4fqw20590  3391073822       5.70 db file sequential read              5.53
SELECT /*+ index (T PK_PTBL1) */ SMALL.COL1, SMALL.COL2, SMA
LL.COL3, SMALL.COL4, SMALL.COL5, SMALL.COL6 SM
ALL.COL7, ... 

Another valuable area is PLSQL Subprograms:

PLSQL Entry Subprogram                                            % Activity
----------------------------------------------------------------- ----------
PLSQL Current Subprogram                                           % Current
----------------------------------------------------------------- ----------
USER1.PROC_d                                                        5.61
USER1.PROC_h                                                        5.61
USER2.PROC_b                                                        3.39
USER1.TRIGGER_a                                                     1.69

Top Sessions, Types of Waits with Parallel!  If you were looking for how certain processes impacted the system, this is a good place to look:

   Sid, Serial# % Activity Event                             % Event
--------------- ---------- ------------------------------ ----------
User                 Program                          # Samples Active     XIDs
-------------------- ------------------------------ ------------------ --------
     2433,33697      15.78 db file sequential read             15.69
USER1               user@host (TNS V1-V3)                176/180 [ 98%]      8     
3358,53811      15.78 db file scattered read              10.61
USER3                  ?  @host (TNS V1-V3)              119/180 [ 66%]      0                          
 CPU + Wait for CPU                   4.46
                                                         50/180 [ 28%]       0    
3383, 7232       5.61 db file sequential read              5.44
USER2                 sqlplus#host (TNS V1-V3)           61/180 [ 34%]       0

What are the top objects during the small window?

Top DB Objects                     DB/Inst: ORC1/ORC1  (Feb 28 12:30 to 13:00)
-> With respect to Application, Cluster, User I/O and buffer busy waits only.
      Object ID % Activity Event                             % Event
--------------- ---------- ------------------------------ ----------
Object Name (Type)                                    Tablespace
----------------------------------------------------- -------------------------
          13932      11.76 db file sequential read             11.76
USER1.PTBL1 (TABLE)                                  USER_LG
          13181      10.70 db file scattered read              10.61
USER1.TBL2.PART_MAX (TABLE PARTITION)                USER_DATA
          13391       5.53 db file sequential read              5.53
USER1.TBL1_IDX1 (INDEX)                              USER_LG
          13220       5.44 db file sequential read              5.44
 

From here you can pull specific datafile waits, and even 5 minute interval top waits. 

ASH and AWR reports are very powerful tools in a DBA’s arsenal, but they should be used in the right context and for the right reason.

The Tao of a Database Outage

As many companies judge a DBA’s worth on the uptime of a database, nothing tests a DBA’s mettle like database service outages where the cause is indeterminate at the time of the outage.  The secondary challenge is that once the database is brought back up, the DBA must then take the necessary steps to analyze the data and figure out what caused the outage, hopefully resolving or reporting to ensure outages to not re-occur.  The DBA’s goal should not just be to resolve the issue, but to provide a high level, clearly documented report of what occurred and what steps have been/scheduled to be performed to address the problem.

This is where a DBA’s skills as a detective, attorney and researcher come into play and where I have discovered many of us, often due to the natural complexity of database environments, can find challenges.  Having a solid set of steps to follow post an outage is extremely important to offering your manager solid data to show that you know what went wrong and to offer recommendations to deter a repeat incident.

As many of us can be “distracted” by benign performance issues that had nothing to do with the outage, it is important to keep ourselves on the correct path, performing solid detective work and following the right culprit until we are able to collect the evidence needed when it’s time to convince the judge or jury, (i.e. manager or development/application team…) To do so takes careful research, so what path is less riddled with benign errors that could distract us?  Where should we start?

The Alert Log and Trace Files

The alert log should always be your first stop once you have determined the database is out of danger and can be returned to an accessible state.

  • Inspect the log at the time leading up to the outage for any error messages
    • Note the type of error message, is it memory, I/O, background or session related?
    • Is there an error number involved that can be researched on the web or with Oracle Support?
    • Has the error occurred more than once or leading up to the outage the only time, (patterns are important…)
  • Taking the time of the error in the alert log into perspective, was there any corresponding trace files produced in the trace/diagnostic directories, (11g) or bdump/udump directories, (10g à)?
    • Inspect for larger than normal trace files.  Incidents will show themselves in more data being produced in the trace files.
    • Is there a pattern to what trace files and what size?
  • If your alert log showed an issue with a specific  type of area in Oracle, this should tell you what background trace files to inspect:
    • Memory-  inspect the memory manager trace files, (mnon, mmnl)
    • Archiver-  The archiver trace file.
    • Log writer-  lgwr or logwriter trace file.
    • Sessions/undo-  smon
    • Recovery-  reco and smon
    • Processes- pmon
    • Queuing/Streams- (qmnc, qxxx)
    • Oracle Jobs-  (jxxx, cjqx)
    • Checkpoint-  ckpt
    • Session Trace files-  <sid>_<pid>_ora.trc files

It is commonly the best idea to first work from the background trace files to the Oracle trace files unless the alert log has directed you to a specific session level trace file to inspect.

With the data between the alert log and the trace files, you should start to have a clear picture of the events that lead up to the outage. 

The trace files will commonly offer the DBA…

  1.  What type of process lead or was part of a combination of issues that lead to the outage.
  2. The SID, the SERIAL#, SQL_ID and even the login information for the process(es) that lead up to the outage. 
  3. What the error messages and/or numbers were involved in the issue.
  4. The times of each step leading up to the incident to give a clear picture of what went wrong.

All of this data should be captured in the final report, without too much detail, just the facts.

You now know what happened, you may not know, as of yet why.  You must look at your options to find out what tools/options are available to collect historical data of the incident.

If you have the Diagnostics and Performance Tuning Pack, then you are in the “with ease” group! (I plan to write a post about ADDM, AWR and ASH soon, so I am doing a bit of chicken before the egg on this one, my apologies if you have not used the following reports from the command line!  Luckily, there are a number of solid resources out there for these reports…)

  1.  If you have a snap ID for the ending period just before your crash, you are able to easily pull and ADDM or AWR report. 
  2. If you have this snap ID and an offending SQL_ID, then I would pull a SQL_ID specific AWR report for the time of the incident, ($ORACLE_HOME/rdbms/admin/awrsqrpt.sql).
  3. If you do not have the snap ID for a considerable time before the outage, then ASH is king and you can simply run an ASH report up to the time of the outage and collect very valuable data about what was occurring at that time in the database.

If you have Oracle Enterprise Manager, then you have a GUI interface that may offer you “lovely” pictures for your report, (which is always appreciated by non-DBA’s that have to decipher what might seem simple to you!) 

  1.  Capture your data as soon as you are able after the incident from OEM.  As Oracle will aggregate this data once it is shown as “historical”, the actual severity of the image can change drastically from real-time to the historical data.
  2. If you at first do not see anything amiss, especially if you are inspecting historical data, carefully move the window in small sections and see how the data is displayed differently.  Aggregated data can “hide” issues unless you happen on the right window. 
  3. Inspect the OEM data before AND after the outage or database hang.  Many times this can give you a full picture of what occurred and if the database was actually hung, vs. an outage, the data will often still be collected at the session level, even if the top activity grid panel shows there was none at the time.

Now, for those that aren’t so lucky and are not blessed with the advanced tools, (I won’t scold you for not convincing your managers and companies to purchase the valuable tools above…:)) but I will offer you the next option down in options:

Statspack:

  1.  Same rules as above.  Attempt to collect the single window of snapshots before the outage and as close to the outage as possible. 

AWR/Statspack review of what we are looking for:

  1. Look for out of the ordinary issues with high waits and sql statements that you normally wouldn’t see.
  2. What are the highest wait events?  Is this normal for this database?  Do you know what is normal for this database? J
  3. Do any of the waits or issues in the report correspond to the trace files? 

Trace and Profile:

If you have the SQL_ID, you can pull the SQL and if you can pull the SQL, you should be able, albeit not in real-time or leading up to your database outage, perform a trace and discover what type of waits are occurring.

As many outages are due to a combination of SQL statements that are “incompatible” with each other due to performance, design challenges or resource limitations, collecting traces for each individual statement can offer a valuable amount of data to back up a report.

Creating Your Report

  1.  No more than 2 pages.
  2. Should have the following  sections:
  • Summary of outage
  • Timeline of outage
  • Findings that back up the summary.
  • Recommendations to address or deter from outage re-occurring.

     3.  Dates to address any issues with responsible parties assigned to address them.

Last Recommendations for Success

Rarely are database outages simple, so utilizing all resources without blinding ourselves with too much data is very important.    I commonly find that we are either walking around, narrowed in on a target, missing great data under our noses or confused to utter distraction by all the data coming at us from all directions.  With that said,

  • Do utilize resources from application, network and/or development support that can offer insight to any area of the outage that you may not have a clear view of.
  • Help them stay on the path, too.  The alert log and trace files, along with your research have provided you with a solid picture of what happened inside the database and lead to the outage, so if anyone appears to be distracting from the issue at hand, simply say, “thank you, but this does not correspond with my data I’ve collected in the database outage.”
  • Always have data to back up your report.  If you have a theory without data, do NOT put it in the report.  You must have data to back up what you are saying occurred.  There is no quicker way to lose coworker and/or customer support than to report something that you can’t back up.

RMOUG 2011 Wind Down

RMOUG 2011 has come and gone-  and it was a fantastic time for me.  I loved the opportunity to talk for two days on database technology, (which my husband thanks all participants for, keeps him from wanting to jab his ears with large, sharp sticks to get away from the techno-garble that leaves his wife’s lips in droves! :) )  and catch up on everyone’s lives.  My presentation skills still need some work, as good as I think I am in smaller groups and especially one on one, I still have some challenges up at the podium.  Every time I get on the stage, it is a challenge to control what I hide very well,  I’m an ADHD and a hidden-introvert and when you put me up there,  it is very difficult for me to keep from losing all access to my faculties. Luckily, I’m also stubborn and quite persistent.  I’m bound and determined to learn how to push my comfort zone farther and further until I can present in larger groups as well as I do in small ones.

This year, being a member of Pythian allowed me to be recognized as both a presenter as well as an exhibitor, which was really a bit overwhelming for me, but since I’m a hidden- introvert, I hid it well..:)  We shared our area with the OakTable Network, which allowed me more time with my first DBA God, Tim Gorman, (always one of my favorite people technically and personally, you just can not help but like the man)  Alex Gorbachev as a newer DBA God in my world, (which he earns his place day in and day out with ease)  along with the constant convoy of DBA’s and Developers that came by the booth.

I was thrilled to have Don Seiler as a Pythian coworker visiting the lovely city of Denver, (even if  I was guilty of almost losing him downtown the first night..:P)  He’s always fun to have around and I was able meet someone who made me feel so “virtually” welcome when I first joined Pythian.   He seemed to have a great time just enjoying the conference and the twitter comments between RMOUG members became quite the topic of conversation during the conference.

I loved having the chance to meet Deb Lilley-  how wonderful she is!  I told her she had to keep prodding my teammate, Paul Logan into speaking back in UK, as he would be quite good at it and that was all the incentive she needed to go back after him again.  She is very personable and simply lovely to be around, (plus she feeds you chocolate cake, how can you go wrong with that? :) )  I also had the opportunity to meet my “sister from another mother”, Robyn Sands.  She and I had a couple discussions about ADHD in the technical arena.  The positives, the negatives and all the coping mechanisms in between.  It was fun to listen to her relay stories with Paul Vallee about previous conferences and I can see why they get along so well!  I did not get to attend either of their presentations and I really wish I could have been  in two places at once!

I finally met Cary Millsap-  one more DBA God down, two to go!  I only spoke to him for a moment, as I have Method R sessions with him soon, but it was nice to finally meet him in person, as I chickened out last year.   My DBA “group” that I hung around with thought I was crazy missing his session, but I decided it would be like watching a really long trailer to a movie I was seeing the next week with the sessions coming up and didn’t want to spoil the ending!   There were so many others-  Graham Wood, Mark Farnham, Randy Cunningham and Dan Fink, (between his and Tim’s presentations on my favorite subject of AWR/ASH, I was so happy to see them both!)   The one I didn’t get to meet and meant to this year was Kyle Hailey.   I saw him a couple times and was simply not able to get away and felt terrible when I realized I had missed him!

I was thrilled to see James Koopmann back on the presentation circuit again.  James was my second DBA God after Tim Gorman took first seat in the house of DBA Olympia.  It took me three weeks to realize that the “James” links in my Internet Explorer to Database Journal was the same DBA as the one I was working for.   When he told me how old his children were catching up at the first night’s reception, it made me realize how many years have gone by, remembering I was just starting to figure it out as I left his care and I was only a Jr. DBA when I worked with Tim-  well, at least we all seem to be aging gracefully! :)

Speaking of my time as a Jr. DBA, (although by the time he came on board there, I had been promoted to “DBA Coordinator”-  yeah, don’t ask what that meant…LOL)  spent time with Joe Sweetser-  fantastic DBA, but worked as a Unix Admin when we were coworkers.  He is bowling with the fantastic SQL Server DBA that introduced and trained me in the “darkside” and I was thrilled to hear how they were both doing.  I can see the two of them getting along famously and was not surprised to hear that they are terrible bowlers! :P

I was surprised how many people from previous companies sent many and others that sent none to the conference.  I also missed two DBA’s who I always enjoy seeing, which included the DBA that I’ve worked with at my last two companies, (He who shall remain nameless and safe from the internet police, we shall call him “T”… :) )  and also didn’t get the chance to see Rhonda Leimberg, who this year, happens to be one of my replacements at my previous position and is now T’s coworker.  She was always one of my favorite people to catch up with and now we have even more to talk about with more common workplaces involved-  missed seeing her terribly, but I hear we are planning Thursday lunches, so all is not lost.

This leads into my section where I get to talk about my previous workplace and how good it was to see everyone from there.  I always felt a great affection for my previous coworkers and remember there was a definite pang knowing I would not see them each day as I grasped onto the opportunity with Pythian with both hands.  I did spend most of my time at RMOUG with them and must thank them for their wonderful support during my presentation, (which whatever that was, no matter if people liked it or not- THAT WAS so NOT the one I practiced for weeks in front of my bathroom mirror!  I do remember thinking after the conference as people came up to ask a few one-on-one questions, “Oh, there is all my data from my brain…  Why not have everyone come back and sit down and I’ll give the presentation you actually came to see…” :) )

I-behavior folks, you ROCK!  I had so much fun hanging out with Michael Landrum, Gretchen Knudsen, Rick Eckl, (a great DBA, loved working with this guy!)  Rajesh Nema, (one of my favorite people/architects) Steve Justus and Nevin Hahn, (my other replacement, but that is not a fitting title, really just need to start referring to him as a “kindred soul of techie life”  instead… :P )  As much of my presentation was based off an article from James Koopmann that introduced me into a direction and solution for challenges we were going through at I-behavior, it was important to have them there, as they knew what we went through and what we had accomplished.

Now, next year they may need to sit up front with small, hard objects to throw at me to dislodge my brain from limbo, but we’ll talk about that as I work through my mental block…:)

Pythian- Devotion to my Vocation

I’ve been employed at Pythian for just over 2 months now.  Not a very long time and yes, I’m still a “newbie”, but I’ve been there long enough to know why I do love my new job.

1.  Working remotely.

     No, not everyone does and it’s not for everyone, but so far it’s been a win-win for both me and Pythian.   I have never needed a manager or anyone to lean over my shoulder to tell me when to work and what to do, so working remotely in a home office has significant benefits for me.  I appreciate the limited office distractions, I have an office phone, so I have an extension, no different from any other employee in the office and my team is great about keeping an open chat window up at all times that we can easily communicate throughout the day.  My Mountain timezone is nice to balance out the Eastern Ottawa folks until our Australian or Indian team come online each day, too.

2.  Opportunity

    I have been delightfully surprised at the opportunities to work on new technology and interesting issues.   I am currently working with Exadata, carefully and methodically submerging myself into the environment.   There is a huge focus on addressing issues the right way, not just to “quiet them.”  We work closely with the customers and this allows us to bond with them just as we would if we were a DBA’s in their office.

   Now that I’m starting to get the hang of the customer support, the internal processes, I even find I have time to write!  I have this huge collection right now of half complete blog posts that just need me to spend more time to complete my research, so I fear there is a flood of posts in my near future.  I have time to present at conferences and think about more than just local ones.  Pythian poses the question of what areas interest me in database administration and what areas I would like to study.   Pythian knows that professional growth is not just good for the employee, it is good for the company.  They want you to be more, the best you can be.  I appreciate that opportunity and not all companies can offer this type of growth, especially one that is geared so specifically to Database Administrators. 

3.  People

   This is a company that is run by pleasant, intelligent and gifted individuals.  I was immensely impressed with Andrew Waitman and his insight into the business.  He has a voracious appetite for knowledge and he loves to share this with everyone.  Paul Vallee is such a gifted man with a wonderful humility about him.  He knows where we need to go to be successful and knows when he needs others to create that success.  I don’t think I need to tell anyone how much I have always idolized Alex Gorbachev.  He’s resided on my short list of DBA Gods for a long time and earned his spot honestly.  I met so many others while I visited Ottawa that upon reflection, noted they were right where they could offer Pythian the most value.  This is a company transitioning to become something even greater than what it already is. 

   As part of a team, there isn’t much more I could ask for.  My lead Mark Brinsmead is great-  he values my opinion and technical skills, but also is good to push me when I need to accomplish more.  I chose a “transition team”, coming on board as others were leaving, but am happy to say that Paul Logan was not one to transition to projects.  He just happened to be visiting Ottawa when I was there for my visit and it is impossible to not like this great, friendly Irishman.  Andy Klock just joined Pythian this month and he’s rounded out the team well, giving the right blend of technical skill and chomp at the bit readiness to take on the world.  I can’t say enough about how pleased I am with the differing technical skills in my team, as well as the technical skills of those in the teams around me.

There are a number of career opportunties with the unparalleled growth that Pythian is experiencing.  If you think you are ready and you are looking for a change, you may want to check out the website, http://www.pythian.com/about/careers/job-listings/  and tell them Kellyn said it was rather nice in Ottawa, even this time of year!