Download Integrating Workload Replays into Database Change

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

Relational model wikipedia , lookup

Microsoft Jet Database Engine wikipedia , lookup

Database wikipedia , lookup

Concurrency control wikipedia , lookup

Database model wikipedia , lookup

Clusterpoint wikipedia , lookup

Oracle Database wikipedia , lookup

ContactPoint wikipedia , lookup

Transcript
Integrating Workload Replays into Database Change Management
There is one universal database constant – that no matter what, your database will evolve. That is it will
change over time. Yet often the Service Level Agreement (SLA) and user expectations will be that things
that they experience and care most about will remain mostly the same (i.e. application performance will
not degrade significantly). Yet there are so many factors that can affect ones’ database – including:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Hardware upgrades, virtual resource re-allocation, or virtual machine relocation
Software upgrades (e.g. new operating system or update to virtual machine software)
Operating system and/or virtual machine configuration and/or initialization parameters
Database patches and/or upgrades (e.g. 10.2.0.3->10.2.0.4 or Oracle 10gR2->11gR1)
Database configuration and/or initialization parameters (e.g. SGA/PGA memory allocations)
Database structural changes (e.g. add/drop/alter tables, columns, indexes and views)
Storage nature changes (e.g. start using partitions, sub-partitions, index organized tables, etc)
New database feature usage (e.g. start using 11G optional OEM “auto plan stability” features)
Statistics and/or histogram collection frequency, granularity, parameters and/or method
Relative size of the database (e.g. most databases grow over time – some exponentially!)
So how can a DBA reasonably ensure that the before and after user experience remains the same? You
cannot simply say that the above conditions were unavoidable and hence we’ll simply have to live with
the results. Nor can you postpone, prevent or otherwise significantly affect many of the above issues.
The answer is to tightly integrate database application “workload replay” into your database change
management procedures – read on to see why.
Let’s say you’re using TOAD with the optional DB Admin Module to perform database compare and sync
operations to effect basic database change management. Let’s further assume that you’re using either
TOAD’s “.DEF” files (offline copies of data dictionary) or standard source code control software with the
resulting CREATE and/or ALTER SQL scripts. Either way, that would only really cover the very basics for
scenarios #6 and #7 from above. That leaves quite a bit of room for error – and surely more than most
SLA’s or users are going to accept.
What’s missing here is what is both “scientific method” and “scientific control” – specifically the ability
to measure the “before” and “after” results to formulate a conclusion (i.e. better or worse). Wikipedia
defines scientific method as follows:
Scientific method refers to a body of techniques for investigating phenomena, acquiring new
knowledge, or correcting and integrating previous knowledge. To be termed scientific, a method
of inquiry must be based on gathering observable, empirical and measurable evidence subject to
specific principles of reasoning. A scientific method consists of the collection of data through
observation and experimentation, and the formulation and testing of hypotheses.
The key phrase is “…gathering observable, empirical and measureable evidence…” What that means is
having some reliable way to repeat something and quantify the variances. So in the case of a database
application, The DBA is looking for the ability to run a sample subset of a realistic workload before and
after the changes are made – with the goal to see if things are better (you keep) or worse (you rollback).
Now you might be thinking “Hey that sounds just like Oracle 11g’s Real Application Testing or RAT!” But
RAT is an optional and fairly expensive add-on that you may not have budget for. Plus RAT’s granularity
is really at the entire database level. In some cases that might be exactly what you really need or desire.
But for many it’s overkill or simply not an option due to financial reasons. So the question becomes “Is
there some way to capture and replay Oracle database application workloads without additional cost,
that’s not overly complex, and yet that’s reliable enough for reasonable before and after comparisons?”
The answer is yes and it’s an Oracle feature that many DBA’s already are quite familiar with – trace files.
The Oracle database provides a wonderful instrumentation capability known as tracing session. This can
be turned on at the database or specific session level. And when the “bind variables” are included in the
trace, you have a perfect log of the database activity or workload. All that’s needed is a simple way to
replay those captured trace files on a target database – whether the same database after some change
or another database (e.g. dev vs. test).
As before let’s say you’re using Toad DBA Suite for Oracle, then guess what – you have the basic tools to
perform basic workload replay. The Quest Software product that can replay an Oracle trace file or files is
called Benchmark Factory (abbreviated and often referred to as “BMF”). Benchmark Factory comes as
part of Toad DBA Suite for Oracle or it can be purchased by itself. Either way the cost is negligible. Plus
it’s a simple client based tool that one can easily experiment with and learn on their PC. In fact I’ve seen
some developers and DBA’s perform the initial, rudimentary “before” and “after” tests on their local
database under the assumption that it better work on a minimal machine before attempting anywhere
real.
Let’s detail an example of how one can use Benchmark Factory to accomplish workload reply.
STEP 1 – Capture the Workload
If you simply want to capture the workload for anywhere from a single session to a small group of
sessions, then you can very simply use TOAD”s “Session Browser” screen as shown below to both
initiate and terminate Oracle collecting trace files for them. Remember – Oracle collects all those trace
files on the database server and not on your local PC (unless you’re using a local PC database that is).
Furthermore, where trace files are collected is both Oracle version and parameter setting dependent.
However the trace files are merely ASCII text files, so there is nothing special about them really – just
that they contain detailed internal database “engine execution” instrumentation data. And I say data
because you’ll really need some kind of tool to assist interpreting the massive amounts of seemingly
unstructured data. But as the old prospector said “There’s gold in them thar hills!”
When you identify a session or sessions that you want to initiate the trace for, TOAD will prompt you for
some trace file “parameters” (e.g. the maximum allowable size for the trace file). You must include both
the ”Timed Statistics” and “Include Binds” check boxes as shown here.
Now you simply let that session run and collect its trace file. When it’s done the database will close the
completed trace file, and of course you can choose to terminate the session’s trace collection anytime
as well.
But what if you wanted to collect trace files for all the sessions within the database? That’s actually
quite easy too. Simply run one the following appropriate commands while connected as a privileged
DBA type user and you’ll start collecting trace files for every new session within your database:
For non-RAC:
DBMS_MONITOR.DATABASE_TRACE_ENABLE
For RAC:
DBMS_MONITOR.DATABASE_TRACE_ENABLE (instance_name => ‘$SID’)
Finally, what if you had instead wanted to collected trace files for specific sessions as defined by some
user defined rules. Then you would need to add a database level event trigger something like this:
CREATE OR REPLACE TRIGGER AUTO_SET_TRACE
AFTER LOGON ON DATABASE
BEGIN
IF (USER IN ('MOE','LARRY','CURLY')) /* ONLY TRACE FOR THE THREE STOOGES */
THEN
EXECUTE IMMEDIATE 'ALTER SESSION SET tracefile_identifier = ''XXXXX''';
EXECUTE IMMEDIATE 'ALTER SESSION SET max_dump_file_size = ''10M''';
DBMS_SESSION.SESSION_TRACE_ENABLE (waits => FALSE, binds => TRUE);
END IF;
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-10001,'AUTO_SET_TRACE ERROR');
END;
Of course the more sessions you trace the more trace files you’ll have to work with. Also remember that
setting on trace scope too wide (such as for the entire database) could slow your database down and/or
fill your trace/log file directory. So use caution and prudence.
STEP 2 – Copy the TRACE file to your PC
Once you’ve identified all the sessions you want to trace and performed the actual tracing of their
workload, then you’ll need to transfer those trace files to your PC. There are ways for you to force the
trace files to follow a user defined naming pattern (as was done in the trigger above) – but very few
people use that Oracle feature it seems. So you’ll need to examine the trace file sizes and dates to
gather all the correct trace files. Here’s an example of Oracle trace files on my local database, where
trace file 2908 is the one I want to work with (i.e. that I did the capture for the purpose of replay). If it
had been on a remote server then I would simply have used TOAD’s FTP utility to copy it down.
STEP 3 – Inspect TRACE File using TOAD
Strictly speaking this step is purely optional. But sometimes it helps to inspect and verify the trace file
contents before proceeding. What if you turned on the capture too early or too late? What if you had
forgot to include the bind values? While performing an Oracle trace is not really too tough, there are
nonetheless steps where one could make a mistake. Thus better to double check. But wait, I said the
trace files were packed full of raw data – and not too user friendly.
Once again TOAD comes to the rescue – via the TOAD Trace File Browser utility shown here below. You
simply open the local copy of the trace file and TOAD mines and presents that data as information – and
pretty much like the Session Browser screen. With this facility, you can very quickly review and accept or
reject your trace files as having been captured properly. In fact if you’re a believer in the “Cary Millsap”
“Method-R” approach to database performance tuning – then you can use TOAD’s Trace File Browser as
a key weapon in your tuning arsenal. In fact the TOAD combination of the Session Browser for managing
trace and this browser makes for a formidable one-two punch.
STEP 4 – Create BMF Project for Replay
OK – once you have the trace files captured, copied locally and inspected for appropriateness, you now
are prepared to use Benchmark Factory to create a BMF project for replaying those trace files. And it’s
actually much easier than you might imagine.
For those like me who prefer the absolute easiest way with the least number of manual steps, if you’ve
performed step 3 using the TOAD Trace File Browser utility, then you simply need to press that screen’s
last toolbar icon (a pair of gears) to automatically package up the trace file as a BMF project and send it
off to BMF for execution as shown here. This is by far the easiest and most direct method for setting up
trace file workload replay scenarios.
But what if you need to create a BMF project for trace file workload replay scenarios that contain more
than one trace file (i.e. a collection of trace files from multiple sessions over a period of time), then you
need to do just a little more work – although not too much 
You simply launch Benchmark Factory and push the first toolbar button (a gear with label of New) which
launches the “Load Scenario Wizard” shown here below. Note that the fifth choice, “Replay load from an
Oracle Trace file”, creates a new BMF project that replays the captured workload from a set of user
defined Oracle trace files. That’s how amazingly simple it is – there’s a specific feature for performing
this exact request.
The next step of the wizard permits you to identify the local Oracle trace file or files that you desire to
execute as part of this BMF project, as shown here:
Benchmark Factory parses those trace files (which might take some time) and then offers you some
options as to how to process them – shown here:
In most cases you’ll simply choose to import the whole file – excluding the ‘SYS’ user. That’s pretty much
it. Remember since trace file collection has to include the bind variable values (as was pointed out back
in step 1), the resulting trace files contain everything necessary to replay the workload – including all the
time dependency information for keeping the transaction timing and order the same.
STEP 5 – Replay the Captured Workload
Once you’ve completed running this load scenario creation wizard, you’ll end up with a completed BMF
project like the one shown here, and to replay it you simply push the toolbar button to ”Submit Job to
Jobs Queue”. That will then replay the workload at whatever database you decide to point to via your
database connection (BMF calls this the database profile – which is simply where you identify user id,
password and database instance).
BMF will then replay your captured database workload exactly the same way as it ran before as shown
here. Remember that if your capture took an hour your replay will take approximately the same time. If
you’ve tuned the application and/or database BMF might process the workload replay faster (meaning
success) or slower (meaning worse). So be patient. Also look into the Benchmark Factory feature called
“Run Reports” (also shown below). When you double click on this entry you can get detailed reports and
graphs about all your prior executions (called iterations).
STEP 6 – How to Measure “Before & After”
Now comes the hardest part – how do you monitor and measure relative results? Benchmark Factory
simply replays the workload (although to call the ton of work BMF does to re-process the trace file and
replay your transaction with proper ordering and timing simple is a misnomer). To monitor and compare
the database performance between runs you need a true diagnostic and/or monitoring tool – something
like Quest’s Spotlight for Oracle (also included in the Toad DBA Suite for Oracle) or Performance Analysis
for Oracle. Here’s an example of Spotlight’s wonderful dashboard showing all aspects of your database
architecture or technology stack – and their performance (using the simplistic traffic light style green,
yellow and red type coloration scheme).
Of course not everyone may have such user friendly tools available for doing their before and after
relative comparisons. In that case you could always use other tools like Oracle’s Stats Pack. You can take
a Stats Pack snapshot before and after each run to establish a performance characteristic and score for
that iteration. Then you can compare the results between iterations to decide whether the results are
better or worse. Of course this technique will require more time and effort – but it’s doable.
And There’s More if You Need
For many people the example shown here will exactly and perfectly suffice – that is they simply need to
perform a database workload capture and playback where nothing changes. For that (and just that) both
BMF and Oracle RAT are pretty much alike. However what if you needed to capture a workload and then
replay it at 150%, 200%, or 300%? In other words you want to capture a workload pattern and then see
how it scales. Or what if you were happy with the capture but wanted to change the bind values for the
SQL statements processed – such that you can perform “what if” type or scenario analysis. Finally what
if you also wanted to manually add something new to the mix – maybe some logic that says when doing
operation X also include this new operation Y. An example might be to see what would happen if you
made a coding change or added a trigger where this new operation gets added to replay – but without
having to make the database change to see the effect. In all these examples (and many more variations),
neither BMF as shown so far nor RAT fit the bill. This is where BMF offers some things that RAT does not.
The BMF project constructed from importing your Oracle trace files is totally user customizable – where
the only limits are your imagination and ability or skills to modify that BMF project. For example you can
easily modify the captured workload for replay by adding new user scenarios, adding new transactions,
or changing the transaction latencies as shown here below. For example by just reducing or minimizing
the latencies you can increase the relative workload against the server (i.e. same transactions but played
back with less delay in between equals more load).
Furthermore BMF offers a complete scripting language, global variables at the project level, and even
contextually smart or sensitive substitution variables or macros – such as the example shown below,
where I’ve modified the SELECT statement’s WHERE to use a valid state randomly selected state at run
time rather than the value that was captured. It’s that easy to change – and the results can be amazing.
Conclusion
Databases change – and change for a myriad of reasons. Popular DBA tools for doing database and/or
schema compare and sync operations typically only cover a sliver of the reasons why a database might
change. So it’s next to impossible to meet service level agreements and user expectations when these
changes occur because something is sorely missing from the equation. That something is the ability to
capture and replay live database workloads before and after the database changes are made such that a
scientifically sound method to observe and quantify any variances permits one to judge the results as
being positive or negative. With the Toad DBA Suite for Oracle you get all the tools necessary to perform
such testing – namely Benchmark Factory, a tool that can replay Oracle trace files with minimal input.
About the Author
Bert Scalzo is a domain expert for Quest Software and a member of the Toad development team. He has
worked with Oracle databases for well over two decades. Prior to joining Quest, Bert worked for both
Oracle Education and Oracle Consulting. He holds several Oracle Masters certifications and an extensive
academic background - including bachelor’s and master’s degrees, and Ph.D., in computer science, as
well as an MBA and insurance industry designations. He is also an Oracle ACE.
Bert is also accomplished speaker who has presented at numerous Oracle conferences and user groups,
including OOW, ODTUG, IOUG, OAUG, and RMOUG. His key areas of DBA interest are data modeling,
database benchmarking, database tuning and optimization, "star schema" data warehouses, Linux, and
VMware.