Information About

  • Subscribe to our RSS feed.
  • Twitter
  • StumbleUpon
  • Reddit
  • Facebook
  • Digg

Tuesday, 5 May 2009

Approaches to Access Path Management... or The Five R's

Posted on 08:29 by Unknown

BIND and REBIND are important components in assuring efficient DB2 applications. Because the BIND/REBIND process determines exactly how your DB2 data is accessed it is important that you develop an appropriate strategy for when and how to REBIND your programs.

There are several common REBIND approaches taken by DB2 users. By far, the best approach is to REBIND your applications over time as the data changes. This approach involves some form of regular maintenance that keeps DB2 statistics up to date (or better yet, uses Real Time Statistics) and formulates new access paths as data volumes and patterns change.

Other approaches include REBINDing only when a new version of DB2 is installed, or perhaps more ambitious, whenever new PTFs are applied to DB2. Another approach is to REBIND automatically after a regular period of time (days, weeks, months, etc.). This approach can work if the period of time is wisely chosen based on the application data – but it still can pose administrative issues.

Another (unfortunately) popular approach can be summarized as “if it ain’t broke don’t fix it!” This is the worst of the several approaches discussed here. The biggest problem with this approach is that you are penalizing every program in your subsystem for fear that a program or two may have a degraded access path. This results in potentially many programs having sub-optimal performance because the optimizer never gets a chance to create better access paths as the data changes.

Of course, the possibility of degraded performance is real – and that is why this approach has been adopted at some sites. The problem is being able to find which statements have degraded. In an ideal world we would be to be able to review the access path changes beforehand to determine if they are better or worse. But DB2 itself does not provide any systematic method of administering access paths that way. There are third party tools that can help you achieve this though.

Anyway, let’s go back to the best approach again, and that is to REBIND on a regular basis as your data changes. This approach has become known as the three Rs. To implement this approach you:

  1. Regularly REORGanize the data to ensure that it is optimally structured.
  2. Follow that with RUNSTATS to be sure that the reorganized state of the data is reflected in the DB2 Catalog.
  3. And follow that with a REBIND for all the application programs that access the data structures impacted by the REORG and RUNSTATS.

At any rate, your goal should be to keep your access paths up-to-date with the current state of your data. Failing to do this means that DB2 is accessing data based upon false assumptions. DB2 is unlikely to make the same access path choice as your data grows – and as patterns within the data change.

By REBINDing you can generally improve the overall performance of your applications because the access paths will be better designed based on an accurate view of the data. Additionally, as DB2 changes are introduced (PTFs, new version/release) optimizer improvements and new access techniques can be incorporated into the access paths. That is, if you never REBIND, not only are you forgoing better access paths due to data changes but you are also forgoing better access paths due to changes to DB2 itself.

Adopting the Three R’s approach can pose additional questions. For example, when should you reorganize? In order to properly determine when a REORG is needed you’ll have to look at statistics. This means looking at either RUNSTATS or RTS. So, perhaps it should be at least 4 R’s – in other words:

  1. RUNSTATS or RTS
  2. REORG
  3. RUNSTATS
  4. REBIND

Now it is true that some folks don’t rely on statistics to schedule a REORG. Instead, they just build the JCL to REORG their database objects when they create the object. So they create a table space then build the REORG job and schedule it to run monthly, or quarterly, or on some regular basis. This is better than no REORG at all, but it is probably not the best approach because you are most likely either reorganizing too soon (in which case you waste the CPU cycles to do the REORG) or you are reorganizing too late (in which case performance is suffering for a period of time before the REORG runs). Better to base your REORGs off of statistics and thresholds using either RUNSTATS or RTS.

Without accurate statistics there is little hope that the optimizer will formulate the best access path to retrieve your data. If the optimizer doesn’t have accurate information on the size, organization, and particulars of your data then it will be creating access paths based on either default or inaccurate statistics. Incorrect statistics will cause bad choices to be made – such as choosing a merge-scan join when a nested loop join would be better, or failure to invoke sequential prefetch, or using the wrong index – or no index at all. And the problem of inaccurate statistics is pervasive. There are shops out there that never, or rarely, run RUNSTATS to gather up-to-date statistics. Make sure yours is not one of those shops!

When should you run RUNSTATS? One answer is “As frequently as possible based on how often your data changes.” To do this you will need to know a thing or two about your data growth patterns: what is its make-up, how is it used, how fast does it grow, and how often does it change? These patterns will differ for every table space in your system.

Next we need to decide when to REBIND? The best answer for this is when statistics have changed significantly enough to change access paths. When we know that data has significantly changed it makes sense to REBIND after the RUNSTATS completes. But the trick is determining exactly when we have a “significant” change in our data. Without an automated method of comparing and contrasting statistics (or even better yet, access paths) coming up with an answer in a manual way can be time-consuming and error-prone – especially if we have thousands of DB2 programs to manage.

As we REBIND, we always must be on alert for rogue access paths. A rogue access path is created when the optimizer formulates a new access path that performs worse than the previous access path. This can happen for a variety of reasons. Of course, number one is that the optimizer, though good, is not perfect. So mistakes can happen. Other factors can cause degraded access paths, too. The access paths for volatile tables depend on when you run the RUNSTATS. Volatile tables are those that start out empty, get rows added to them during processing, and are emptied out at the end of the day. And, of course, if the catalog or statistics are not accurate we can get problems, too.

So adopting the Four R’s approach implies that you will have to develop a methodology for reviewing your access paths and taking care of any “potential” problem access paths. Indeed, the Four R’s becomes the Five R’s as we add a step to review the access paths after REBINDing to make sure that there are no rogue access paths:

  1. Start with a RTS (or use RUNSTATS) to determine when to REORG.
  2. REORGanize the table spaces (and indexes)
  3. After reorganizing, run RUNSTATS (to ensure the DB2 Catalog is up-to-date)
  4. Follow that with the REBINDs.
  5. Then we need that fifth R – which is to review the access paths generated by the REBIND.

The review is of utmost importance because the optimizer can make mistakes. And, of course, so can you. But your users will not call you when performance is better (or the same). They only dial your numbers when performance gets worse. As such, proactive shops will put best practices in place to test REBIND results comparing the before and after impact of the optimizer’s choices. Again, there are tools that can help to automate this review process.

Read More
Posted in BIND, performance, REBIND, SQL | No comments

Tuesday, 28 April 2009

Basic DB2 Buffering and Memory Guidelines

Posted on 08:47 by Unknown
One of the most important areas for tuning DB2 subsystem performance is memory usage. DB2 for z/OS uses memory for buffer pools, the EDM pool, RID pool and sort pools to cache data and structures in memory. The better memory is allocated to these structures, the better DB2 will perform.

When allocating DB2 buffer pools, keep these rules of thumb in mind:

  • Don't allocate everything to a single buffer pool (e.g., BP0); use a multiple buffer pool strategy.

  • Explicitly specify a buffer pool for every table space and index.

  • Isolate the DB2 Catalog in BP0; put user and application DB2 objects into other buffer pools.

  • Consider separating indexes from table spaces with each in their own dedicated buffer pools.

  • Consider isolating heavily hit data into its own buffer pool to better control performance.

  • Consider isolating sorts into a single buffer pool and tuning for mostly sequential access (e.g. BP7).

  • Consider separating DB2 objects into separate buffer pools that have been configured for sequential verses random access.

  • Forget about trying to follow a cookie-cutter approach to buffer pool management. Every shop must create and optimize a buffer pool strategy for its own data and application mix. DB2 offers the following buffer pool tuning "knobs" that can be used to configure virutal buffer pools to the type of processing they support:

  • DWQT –this value is the deferred write threshold; it is expressed as a percentage of the virtual buffer pool that might be occupied by unavailable pages. When this threshold is reached DB2 will start to schedule write I/Os to externalize data. The default is 50%, which is likely to be too high for most shops.

  • VDWQT – this value is the vertical deferred write threshold; it is basically the same as DWQT, but for individual data sets. The default is 10%, which once again is quite likely to be too high for many shops.

  • VPSEQT – this value is the sequential steal threshold; it is a expressed as a percentage of the virtual buffer pool that can be occupied by sequentially accessed pages. Tune buffer pools for sequential access such as scans and sorting by modifying VPSEQT to a larger value. The default is 80%.

  • VPPSEQT – this value is the sequential steal threshold for parallel operations; the default value is 50%.

  • VPXPSEQT – this value is assisting parallel sequential threshold; it is basically the VPPSEQT for opertaions from another DB2 subsystem in the data sharing group.


  • These parameters can be changed using the ALTER BUFFERPOOL command. Additionally, hiperpools can be created to back up DB2 virtual buffer pools with additional memory. DB2 provides several tuning knobs for hiperpools, too, including HPSIZE to adjust the size of hiperpools and HPSEQT to adjust the hiperpool sequential steal threshold.

    With the advent of DB2 V8, we will have more memory at our disposal for DB2's use. This next version of DB2 will be able to surmount the limitation of 2GB real storage that was imposed due to S/390's 31-bit addressing. Theoretically, with 64-bit addressing DB2 could have up to 16 exabytes of virtual storage addressability to be used by a single DB2 address space. Now there is some room for growth!

    In addition to buffer pools, DB2 uses memory for the EDM pool. The EDM pool is used for caching internal structures used by DB2 programs. This includes DBDs, SKCTs, CTs, SKPTs, and PTs. It also includes the authorization cache for plans and packages, as well as the cache for dynamic SQL mini-plans. As a general rule of thumb, shoot for an 80 percent hit rate with the EDM pool; this means that only one out every five times should a structure need to be loaded from disk into the EDM pool.

    Finally, remember that buffer and EDM pool tuning are in-depth subjects that cannot be adequately covered in a high-level tip such as this. So, study those IBM DB2 manuals - and learn by doing. Additionally, there is much more to proper DB2 system performance tuning than memory tuning. Other system elements requiring attention include allied agent setup (CICS, TSO, etc.), network configuration, locking, logging, and Parallel Sysplex configuration and management for DB2 data-sharing shops.
    Read More
    Posted in buffers, memory, performance | No comments

    Thursday, 16 April 2009

    Stages 3 and 4

    Posted on 11:52 by Unknown
    All good DB2 developers and DBAs know about Stage 1 and Stage 2 predicates, right? But have you ever heard of Stage 3 and Stage 4 predicates? Well, you’re about to!


    First of all, let’s do a quick review to catch those readers who don’t know what Stage 1 and 2 are. You may have heard about sargable and nonsargable, and if so, Stage 1 is sargable and Stage 2 is nonsargable. If not, don’t worry about those terms, they are obsolete.


    A predicate that can be evaluated in the Data Manager (DM) component of DB2, that is at the earliest stage of query execution, is called a Stage 1 predcicate. Stage 2 predicates need to be passed up to the Relational Data System (RDS) to process. So Stage 1 predicates are more efficient than Stage 2 predicates because the Data Manager component of DB2 is at a level closer to the data than the Relational Data System. Stage 1 predicates, being evaluated earlier in the data retrieval process, avoid the overhead of passing data from component to component of DB2. For this reason, developers are encourage to use Stage 1 predicates rather than Stage 2 predicates to optimize performance.


    What makes a predicate Stage 2 instead of Stage 1? Well, it is all in the type of predicate you code and how you write your SQL. There is a list of Stage 1 and Stage 2 predicates in Chapter 12 of the DB2 Performance and Tuning manual. (The same chart also tells you whether a predicates is indexable or not.) Whenever you move from one release of DB2 to another one of the first things you should do is consult this manual to see if any predicates have changed from Stage 2 to Stage 1… and you should make sure all of your developers have a copy of that chart taped to their cubicle wall!


    OK, so what is all of this about Stage 3 and Stage 4, then? Well, it is a way of thinking about some bad SQL practices. Instead of coding a SQL predicate some programmers choose to bring all (or most) of the data into their program and then filter it using IF-THEN or CASE statements. You can think of these as Stage 3 predicates because it is one more place that the data must be passed to before it can be determined whether the data is needed.


    Stage 4? That is when you use a black box (see the link for an explanation if you don't know what a black box is)... Instead of filtering the data in the DM or the RDS or even in your program, you have to work with another program altogether – the black box – to return the right data.


    So just remember 1… 2… 3… 4… and that is the order of efficiency for those types of predicates. 1 is better than 2 is better than 3 is better than 4…

    Read More
    Posted in performance, SQL, Stage 1, Stage 2 | No comments

    Monday, 30 March 2009

    Today's Modern Mainframe

    Posted on 11:34 by Unknown
    IBM mainframes process two thirds of the world’s business information every day, and have
    been doing so for decades, because of the many strengths provided by the mainframe, such
    as high availability, good redundancy, high performance I/O capabilities, and much more.

    But have you ever been challenged by an anti-mainframer by a statement like "Oh, aren't mainframes dead?" - or - "Why would anyone still use a mainframe?" Have you wanted a ready response that is easily digestible and not overly techie? Well, IBM has a new Redguide book titled The IBM Mainframe Today: System z Strengths and Values that might be of help.

    This publication describes the business drivers, their impact on IT, and how the System z platform can be a major player for the business solution by providing flexibility, responsiveness to customers and market needs, as well as cost effectiveness. It also discusses the mainframe hardware, software, and environment, with an emphasis on the features and capabilities that make the System z mainframe a good choice for businesses.

    Also, you may have noticed the new term: Redguide. Similar to an IBM Redbook, an IBM Redguide is not quite as technical as a Redbook, but more in-depth than a brochure or other pieces of "sales" collateral.

    So, if you are a mainframer like me, you'll want to download and read The IBM Mainframe Today: System z Strengths and Value. After all, the price is right (free). And you'll want to keep an eye out for additional Redguides from IBM. Susan Visser recently blogged about the first 15 Redguides here.
    Read More
    Posted in mainframe, manuals, RedBook | No comments

    Thursday, 26 March 2009

    Cost vs. Advantage of Moving From IMS DB to DB2

    Posted on 11:22 by Unknown
    As my regular readers know, every now and then I like to share Q+A exchanges I've had with folks. Today, the question I was asked is as follows:

    My customer is wondering about the possible advantages of converting his IMS DB/DC system to IMS DC/DB2. The application currently performs well with an internal response time of less than .5 seconds on average.

    Even with an arrival rate of 425 full-function transactions per second, the queue count rarely goes above 10. This system typically peaks at 12.5 million transactions per twelve-hour day against HDAM and HIDAM databases totaling close to 1 terabyte. The application itself is currently a bit over seven million lines of code.

    Can you comment on the relative cost vs. advantage of moving an existing application from IMS DB to DB2 along with relative CPU capacity requirements?

    And here is my short response:

    Well, the main advantages of converting from IMS/DB to DB2 would be to gain better support for ad hoc queries, standard SQL (instead of non-standard DL/1) for writing queries and a deeper pool of talent to support the DB2 environment (there are more DB2 folks out there than IMS folks now-a-days).

    The benefit of sticking with IMS is the good performance you currently enjoy as well as no need to convert the database structures or the 7 million lines of application code. Converting database structures is not horribly difficult, but there are some gotchas that can arise. The bigger problem is converting all of those DL/1 calls to appropriate SQL. This will not be a simple 1 to 1 conversion and it will very likely be quite time-consuming.

    I guess it boils down to this: How happy are you with the current application, are you able to support it properly and how many other IMS/DB databases do you support? If this is the last IMS/DB database and you are looking to rid yourself of the IMS license, then it might make sense to convert. But you should do a project plan and cost/benefit analysis before making your final decision (conversion can be very costly). If you have a lot of other IMS/DB databases, then it probably doesn't make a lot of sense to convert to DB2 unless you cannot support the needs of your end users (management, ad hoc support, etc.) using IMS.

    In terms of CPU requirements, DB2 will consume more CPU than IMS. DB2 optimizes queries internally whereas IMS programmers construct access paths to data. This additional requirement will cause DB2 to consume more CPU. But, of course, that additional CPU brings with it the enormous benefit of database optimization and better ad hoc query support.

    You might also want to take a look at a product like DL/2. I have never used it so I cannot recommend for or against its functionality, but it looks like it might save you some work.
    Read More
    Posted in DB2 conversion, DL/1, IMS, SQL | No comments

    Wednesday, 18 March 2009

    A Short Introduction to Lock Avoidance

    Posted on 08:29 by Unknown
    Lock avoidance is a mechanism employed by DB2 for z/OS to access data without locking while still maintaining data integrity. It prohibits access to uncommitted data and serializes access to pages. Lock avoidance improves performance by reducing the overall volume of lock requests. After all, let’s face it, the most efficient lock is the one never taken.


    Of course, even if it is not taking a lock, DB2 must still maintain the integrity of its data. Instead of taking a lock, DB2 uses a latch. To take advantage of Lock Avoidance, the SQL statement must be Read Only and the plan must be bound with Isolation Level Cursor Stability (CS) and CURRENTDATA(NO).


    In general, DB2 avoids locking data pages if it can determine that the data to be accessed is committed and that no semantics are violated by not acquiring the lock. DB2 avoids locks by examining the log to verify the committed state of the data.


    When determining if lock avoidance techniques will be practical, DB2 first scans the page to be accessed to determine whether any rows qualify. If none qualify, a lock is not required.


    For each data page to be accessed, the RBA of the last page update (stored in the data page header) is compared with the log RBA for the oldest active unit of recovery. This RBA is called the Commit Log Sequence Number, or CLSN. If the CLSN is greater than the last page update RBA, the data on the page has been committed and the page lock can be avoided.


    Additionally, a bit is stored in the record header for each row on the page. The bit is called the Possibly UNCommitted, or PUNC, bit. The PUNC bit indicates whether update activity has been performed on the row. For each qualifying row on the page, the PUNC bit is checked to see whether it is off. This indicates that the row has not been updated since the last time the bit was turned off. Therefore, locking can be avoided. (Note that there is no external method for DBAs to use to determine whether a row’s PUNC bit is on or off.)


    If neither CLSN nor PUNC bit testing indicates that a lock can be avoided, DB2 acquires the requisite lock.


    In addition to enhancing performance, lock avoidance improves data availability. Data that without lock avoidance would have been considered locked, and therefore unavailable, can now be accessible.


    Lock avoidance is used only for data pages. Further, DB2 Catalog and DB2 Directory access does not use lock avoidance techniques. You can avoid locks under the following circumstances:


    • For any pages accessed by read-only or ambiguous queries bound with ISOLATION(CS) and CURRENTDATA NO
    • For any unqualified rows accessed by queries bound with ISOLATION(CS) or ISOLATION(RS)
    • When DB2 system-managed referential integrity checks for dependent rows caused by either the primary key being modified, or the parent row being deleted and the DELETE RESTRICT rule is in effect
    • For both COPY and RUNSTATS when SHRLEVEL(CHANGE) is specified


    To determine the impact of lock avoidance on your system, you can review DB2 trace records. IFCIDs 218 and 223 provide CLSN information, and IFCIDs 226 and 227 provide 'wait for page latch' information.


    Avoiding locks can improve the performance of your queries and programs that satisfy the preceding requirements. To encourage DB2 to avoid locks, BIND your plans and packages specifying ISOLATION(CS) and CURRENTDATA NO. Furthermore, avoid ambiguous cursors by specifying FOR READ ONLY for all cursors that are not used for updating.

    Read More
    Posted in locking, tips and tricks | No comments

    Friday, 6 March 2009

    Attend the 2009 IDUG North American Conference (at a Discount)

    Posted on 11:42 by Unknown
    Today's blog post is just a friendly reminder to the DB2 community that the North American IDUG conference is fast approaching. This year's event will be held in Denver, CO from Tuesday May 12, 2009 through Friday, May 15th. And if you act quickly you can attend at a discounted rate using the early bird registration discount coupon valid through March 27th).

    And don't forget those day long seminars that IDUG holds before the regular conference. Instead of being on a Sunday, the seminars will be on the Monday before the conference this year! The
    Monday-Friday schedule is a departure from previous IDUG conferences, and was done to reduce or even eliminate the need for weekend travel.

    IDUG is one of the best places to advance your DB2 knowledge. This year's conference boasts over 120 hours of technical material to be presented by a mix of real-world DB2 users, third-party vendors, DB2 Gold Consultants, IBM Fellows, IBM Distinguished Engineers, IBM Vice Presidents, and dozens of the most sought-after DB2 speakers in the world.

    I will be delivering two presentations at this year's IDUG:
    • DB2 9: For Developers Only - Wed, 5/13/09 at 1:30 PM
    • Counting Down the DB2 Performance Top 40 - Fri, 5/15/09 at 9:00 AM
    I will also be participating in the Data Privacy, Security and Audit Compliance special Interest Group (SIG), one of the many SIGs that will be conducted at IDUG.

    Attendees will have ample time to meet informally between sessions, or as part of SIGs, discussion panels, or the Thursday night "dine-around" with some of IDUG's most popular presenters. And if you are thinking about getting certified, IDUG is the place to do that! Throughout the conference, IBM will waive the $200 certification test fee for all attendees, with no limit on the number of tests each attendee can take. IBM will offer 40 different certification tests that cover DB2, InfoSphere, U2, Content Management, DataStage, and other IBM Information Management products.

    Seriously, you don't want to miss out on all of the wonderful learning and networking opportunities that IDUG offers DB2 professionals. Take the time to check out the IDUG conference details on the web and work on getting your management's approval for this great educational event.
    Read More
    Posted in IDUG, training, user groups | No comments
    Newer Posts Older Posts Home
    Subscribe to: Posts (Atom)

    Popular Posts

    • DB2 Locking, Part 2: Table Space and Table Locks
      Today's post is the second in our DB2 locking series and it covers the topic of table space and table locks. Table Space Locks A table s...
    • IBM Announces DB2 10 for z/OS Beta Program
      IBM announced the beta program for the next version of DB2 today, now "officially" known as DB2 10 (no more DB2 X). It is a closed...
    • CLONE Tables [DB2 9 for z/OS]
      This new feature in DB2 V9 might sound like an old monster movie ( Invasion of the Clone Tables!!! ), but it is actually a nifty new capabil...
    • New Data Types [DB2 9 for z/OS]
      As we continue our blog series on the new features and functionality of DB2 9 for z/OS, today we examine the four (OK, five) new data types ...
    • DB2 Locking, Part 4: Page and Row Locks
      In the first three installments of this series on DB2 locking we have looked ata broad overview of locking (part 1), table and table space l...
    • New Built-in Functions [DB2 9 for z/OS]
      DB2 9 for z/OS introduces a bevy of new built-in functions (BIFs) for programmers to use in their SQL statements. It is important to keep tr...
    • STOGROUPs and SMS [DB2 9 for z/OS]
      With today’s posting we return to our examination of the new features of DB2 9 for z/OS. With V9, DB2 storage groups can be better integrate...
    • IBM Manages the Data Lifecycle
      Data lifecycle is a somewhat new-ish term, at least in terms of what I plan to talk about in this blog posting. The data lifecycle – and dat...
    • Larry Sure Knows How to Get Press
      Going under the assumption (I assume) that no press is bad press, Oracle CEO Larry Ellison has attacked IBM's DB2... but he made several...
    • DB2 Locking, Part 6: Claims, Drains, and Partition Independence
      DB2 augments resource serialization using claims and drains in addition to transaction locking. The claim and drain process enables DB2 to p...

    Categories

    • .NET
    • ACID
    • ALTER
    • analytics
    • articles
    • automation
    • award
    • backup
    • best practices
    • BETWEEN
    • BI
    • Big Data
    • BIND
    • blogging
    • book review
    • bufferpool
    • buffers
    • CASE
    • change management
    • claim
    • Cognos
    • COMMIT
    • compliance
    • compression
    • conference
    • constraints
    • COPY
    • data
    • data breaches
    • data quality
    • data security
    • Data Sharing
    • data types
    • data warehouse
    • database archiving
    • database auditing
    • database design
    • date
    • DB2
    • DB2 10
    • DB2 11
    • DB2 9
    • DB2 Analystics Accelerator
    • DB2 Catalog
    • DB2 conversion
    • DB2 Developer's Guide
    • DB2 X
    • DB2-L
    • DBA
    • DDL
    • developerWorks
    • dirty read
    • DISPLAY
    • DL/1
    • drain
    • DSNZPARM
    • Dynamic SQL
    • eBook
    • education
    • enclave SRB
    • encryption
    • ERP
    • FETCH FIRST
    • Freakonomics
    • functions
    • generosity factor
    • Happy Holidays
    • Happy New Year
    • Hibernate
    • HIPAA
    • history
    • IBM
    • ICF
    • IDUG
    • IFL
    • IMS
    • index
    • Information Agenda
    • Informix
    • InfoSphere
    • infrastructure
    • integrity
    • IOD
    • IOD11
    • IOD2009
    • IOD2011
    • IODGC
    • IRLM
    • ISOLATION
    • Java
    • JDBC
    • load balancing
    • LOBs
    • locking
    • LUW
    • mainframe
    • Malcolm Gladwell
    • manuals
    • memory
    • middleware
    • migration
    • misc
    • monitoring
    • natural key
    • Netezza
    • new blog location
    • NoSQL
    • nulls
    • OLAP
    • optimization
    • Oracle versus DB2
    • packages
    • PCI-DSS
    • performance
    • PIECESIZE
    • poll
    • primary key
    • production data
    • programming
    • Q+A
    • QMF
    • REBIND
    • recovery
    • RedBook
    • regulatory compliance
    • reliability
    • REORG
    • research
    • RI
    • RTO
    • salaries
    • SAP
    • scalability
    • security
    • smarter planet
    • SoftwareOnZ
    • sort
    • SOX
    • specialty processors
    • SPUFI
    • SQL
    • Stage 1
    • Stage 2
    • standards
    • Steelers
    • storage
    • stored procedures
    • stream computing
    • surrogate key
    • SYSADM
    • Sysadmin
    • table expressions
    • table space
    • TechDoc
    • tips and tricks
    • Top Ten
    • trace
    • training
    • triggers
    • Twitter
    • UDFs
    • UNION
    • unstructured data
    • user groups
    • utilities
    • V1
    • V10
    • V2
    • V3
    • V4
    • V5
    • V6
    • V7
    • V8
    • V9
    • variables
    • views
    • VOLATILE
    • Web 2.0
    • webinar
    • Wordle
    • XML
    • z/OS
    • zAAP
    • zIIP

    Blog Archive

    • ▼  2014 (2)
      • ▼  January (2)
        • DBA Rules of Thumb - Part 9 (Call on Others for He...
        • DBA Rules of Thumb - Part 8 (Being Business Savvy)
    • ►  2013 (50)
      • ►  December (6)
      • ►  November (6)
      • ►  October (5)
      • ►  September (5)
      • ►  August (3)
      • ►  July (7)
      • ►  June (4)
      • ►  May (4)
      • ►  April (5)
      • ►  March (1)
      • ►  February (2)
      • ►  January (2)
    • ►  2012 (17)
      • ►  December (1)
      • ►  November (2)
      • ►  October (3)
      • ►  August (2)
      • ►  July (1)
      • ►  May (1)
      • ►  April (1)
      • ►  March (2)
      • ►  February (2)
      • ►  January (2)
    • ►  2011 (27)
      • ►  December (1)
      • ►  November (1)
      • ►  October (6)
      • ►  September (2)
      • ►  August (3)
      • ►  July (2)
      • ►  June (3)
      • ►  May (2)
      • ►  April (3)
      • ►  March (1)
      • ►  February (3)
    • ►  2010 (29)
      • ►  December (1)
      • ►  October (6)
      • ►  September (1)
      • ►  August (2)
      • ►  July (2)
      • ►  June (1)
      • ►  May (3)
      • ►  April (3)
      • ►  March (3)
      • ►  February (4)
      • ►  January (3)
    • ►  2009 (43)
      • ►  December (5)
      • ►  November (4)
      • ►  October (6)
      • ►  September (2)
      • ►  August (1)
      • ►  July (3)
      • ►  June (2)
      • ►  May (3)
      • ►  April (2)
      • ►  March (4)
      • ►  February (5)
      • ►  January (6)
    • ►  2008 (44)
      • ►  December (1)
      • ►  November (4)
      • ►  October (4)
      • ►  September (6)
      • ►  August (1)
      • ►  July (4)
      • ►  June (3)
      • ►  May (5)
      • ►  April (4)
      • ►  March (4)
      • ►  February (2)
      • ►  January (6)
    • ►  2007 (51)
      • ►  December (2)
      • ►  November (3)
      • ►  October (5)
      • ►  September (3)
      • ►  August (6)
      • ►  July (4)
      • ►  June (4)
      • ►  May (5)
      • ►  April (8)
      • ►  March (5)
      • ►  February (4)
      • ►  January (2)
    • ►  2006 (60)
      • ►  November (4)
      • ►  October (8)
      • ►  September (4)
      • ►  August (11)
      • ►  July (7)
      • ►  June (2)
      • ►  May (7)
      • ►  April (3)
      • ►  March (6)
      • ►  February (4)
      • ►  January (4)
    • ►  2005 (11)
      • ►  December (3)
      • ►  November (6)
      • ►  October (2)
    Powered by Blogger.

    About Me

    Unknown
    View my complete profile