Tuesday, March 25, 2014

Why to invest in Mainframe?


Mainframe companies have a big advantage on the financial market. They are robust and predictable. That's why investing in the Mainframe is a valid option. Investing, not speculating. In other words, you may consider acquiring stocks from companies in the Mainframe market, for long term investment. Because the fruits are the dividends, like in a good old stable factory. Although classified in the IT market, Mainframe companies are no start-ups, they are not good for day-to-day (or hour-to-hour !) speculation. Consider this: you may place your savings in a bank, but the interests are not very substantial. Often, the interests will be lower than the inflation (varying by country). So you actually lose money over time. 

Buying stock options implies risk, so you need to be careful with your life's savings. Mainframe companies have years (decades) of financial history that can be considered: average price over the last X years, variations in the stock price, amount of the dividends, stability of dividends... If you are looking for a way to invest a part of your savings, more profitable that a bank saving account, you may have a look at stocks. Stocks that generate predictable dividends. High dividends. Stocks which price does not fluctuate like a yo-yo: you want to be able to sell your stocks, without losing money. Stable stock price, high & predictable dividends: Good combination for long term stock investment. Mainframe.

I did some analysis of the main Mainframe companies' stocks, summarized for your convenience in the table below, that contains assessments:
  • Risk: analyzing stock price to assess price fluctuation (yo-yo) High/Med/Low
  • Risk: analyzing dividends' stability over the years High/Med/Low 
  • Benefit: computation of the yearly profit (annual dividends/AVG stock price)

AVG stock price (3Yrs)
Last year trend
yo-yo price
dividends
dividends' stability
yearly profit
IBM (NYSE: IBM)
$180
-14%
Med
$0.95 / quarter
High
2.10%
CA Technologies (NYSE: CA)
$26
+28%
Low
$0.25 / quarter
High
3.80%
Compuware (NYSE: CPWR)
$10
-13%
Low
$0.125 / quarter
Med
5.00%

Disclaimer: I am no financial consultant nor any kind or financial professional, the above article is a summary of my candid thoughts on the topic. Data in the table are a quick assessment of stocks based on data publically available on http://www.nasdaq.com/.   Concerns & critics are welcome.

Tuesday, March 18, 2014

Why should young IT professionals start their career on Mainframe?

If you just finished university with a degree in Computer Sciences, you are probably looking for a job… and if you are reading this article, you are probably still searching. Although you might not even know what a Mainframe is, you might want to consider a career on the “big iron”; and here is why.

The mainframe is a 40+ years old platform and most software are written in low-level languages such as assembler or Cobol. Granted. As much as it appears non-attractive, it is a real opportunity: while most of the world data and processing resides in Mainframes, Mainframe professionals (so called “Mainframers”) are close to retirement. The equation is simple, IT talents with such knowledge will be rarity in the very near future, and biggest fortune companies will crave for them.


But … do not think mainframe is solely legacy. In fact, lots of new projects exist on Mainframe, most of which use Java, C, or C++. The new trend of “virtualization” is a notion which exists since decades in the Mainframe world. If you think about it, Mainframe systems are nothing else than a private cloud: Mainframe means enormous amount of data, incredible processing capabilities, and very high security (who even ever spoke about a virus on Mainframe?). Mainframe also rimes with green computing, since it uses much less energy than other platforms, because 1 Mainframe can support a workload equivalent to thousands of distributed servers.

In a few words, it is cool to work on Mainframe!

Sources:

Wednesday, March 12, 2014

Collect and Analyze DB2 performance data

I recently met a DB2 user who was interested in monitoring and analyzing DB2 performance. He is a DB2 DBA, and he was especially interested in monitoring SQL transactions (figuring out high consumption).
Collecting and analyzing DB2 performance data is one of the main role of Database Administrators, and it’s a complex activity.

Because a video is worth a thousand words, I suggest you have a look at a presentation called Top 10 Tips for Collecting and Preparing DB2 Performance Data. You will need to enter a few contact details to receive the link via e-mail.

Also, you may have a look at some interesting IDUG presentations (from DB2 users) on the IDUG website, you also need to register for free to access to content:
How Did Israel Discount Bank reduce its CPU cost by 10%? – by Yaron Zahavi (Israel Discount Bank)

More specifically, one of the tool that Database Administrators can use for collecting and analyzing DB2 performance is CA Detector® for DB2 for z/OS. By using CA Detector, you can capture every single SQL statements executed so you can get the full picture either because you want to do chargeback, trending, locate the biggest performance hits, or find the low hanging fruit to optimize to get the biggest bank for the bucks. You can also exclude the data collection specific transactions, SQL statements, or plans … to save some resources. If you want to know more about CA Detector, you may also have a look at the product manual.

To complete this topic, there are various presentations regarding DB2 v11 Performance being held at IDUG, and various Regional User Groups.

My little finger tells me that, if you are interested in DB2 v11 Performance, you will want to have a look at the next csDUG agenda, when it will be available ;)

Friday, March 7, 2014

Live news from PDUG!

Greetings from Piaseczno, where the PDUG event is ongoing. I must say that the event is very well organized, PDUG has even a newsletter (paper version, containing technical articles from their users). The sessions are interesting, here some pictures you may enjoy below.

 Jacek Rafalak (PDUG president, Asseco)

John Campbell, IBM Distinguished Engineer

Steve Thomas, CA Technologies

Expert Panel
John Campbell, IBM Distinguished Engineer
Steve Thomas, CA Technologies
Cristian Molaro, IBM Gold Consultant


Saturday, March 1, 2014

PDUG event - Piaseczno - 2014, March 6th and 7th

The new Polish DB2 Users Group was awarded "Best New User Group 2013" during the last IDUG in Barcelona.

Polish DB2 Users Group
  
This regional user group is announcing yet another conference on March 6th and 7th.
  
I plan to attend this conference, I am particularly interested in sessions for various industry experts, such as:
·         Steven Thomas
o   The Online Schema Revolution 
o   A Review of Bind and Rebind Parameters for DB2 for z/OS
·         John Campbell 
o   DB2 10 for z/OS Migration Planning and Experiences 
o   Hard Lessons learned from DB2 for z/OS Health Check Studies
·         Cristian Molaro 
o   HADR and pureScale demystified

Are you a qualified DB2 specialist? Do you want to discover what DB2 is or what it can do for you? Are you an experienced DBA in environments other databases and need support in DB2 for a new project? Are you interested in what role it can play a DB2 architecture of your business?
รจ  Join the PDUG conference ! 

If you attend the event, register [here] to have a chance to win a FREE pass for the next IDUG conference in Prague !

Thursday, January 23, 2014

IDUG North America is around the corner

Back from Xams vacation, let me wish everyone a Happy New Year !

As the tradition mandates, I have been taking a few resolutions for 2014, and if you wonder which ones, here you go:
1-      Attend the IDUG conference in Prague
2-      Write a XMLquery without SQL syntax error in less than 10 minutes
3-      Become friend with iterative SQL coding techniques

And since we are at the beginning of the year, it’s time to look at all the great DB2 upcoming events in 2014. As you probably know, IDUG North America is around the corner, it will take place in Phoenix on May 12-16 [more info here]. Unfortunately, I probably won’t make it. I have however looked at the many sessions scheduled, read carefully the description, and selected the ones that matches my interests (and my new year’s resolutions). So here is the top 10 sessions that I recommend (ordered by session’s code) :

1-      A10 DB2 for z/OS: Disaster Recovery for the Rest of Us
2-      B02 How to Optimize a DB2 z/OS Application without any SQL or Program Change?
3-      E03 PARLEZ-VOUS KLINGON - DB2 RECURSION SQL FOR DATABASE MAGICIANS
4-      E07 Going Native: Leveraging DB2 for z/OS SQL Procedures and UDFs
5-      F04 Big Data Disaster Recovery Performance
6-      F06 With the Emergence of Big Data, Where do Relational Technologies Fit?
7-      F08 IBM DB2 Analytics Accelerator - The Performance Revolution Continues
8-      F10 A Big Data Roadmap for the DB2 Professional
9-      G02 The DB2 11 catalog – something new, something old, something changed
10-   G10 Unleash the power of XML retrieval with Xpath and Xquery, are you still with me ?

I must also indicate that I’m gladly surprised that the IDUG Planning Committee (finally!) accepted a z/OS session that really targets “beginners”:
E08 A 50 Cent tour of DB2

Of course, this is only my opinion, and if you have your own suggestions, or if you want to share which sessions you recommend, feel free to comment this article.

Monday, November 25, 2013

List Indexes and IX Columns for a given table

If you ever wanted to see the indexes associated to a given table, the SYSIBM.SYSINDEXES catalog table is for you.
And if you want to see the columns that are indexed, this information is stored in yet another catalog table, SYSIBM.SYSKEYS, but this catalog table does not contain a direct relation to the table.

So, if you want to see all related Indexes and IX Columns for a given table, you must do a JOIN. So far so good, except that you end up with one row, for each columns of the indexes.
That is, if you have a table with 2 indexes, that reference respectively 3 and 5 columns of the table, you will get 8 rows.

   Table  Index  ColName  ColSort
   TB1    IX1    COL1     A
   TB1    IX1    COL2     D
   TB1    IX1    COL3     A
   TB1    IX2    COL1     A
   TB1    IX2    COL5     A
   TB1    IX2    COL2     A
   TB1    IX2    COL3     A
   TB1    IX2    COL7     A

I wanted to simplify the results to get only 2 rows (one per index), that will contain the list of columns, something like:

   Table  Index  Columns
   TB1    IX1    COL1,A,COL2,D,COL3,A
   TB1    IX2    COL1,A,COL5,A,COL2,A,COL3,A,COL7,A

Browsing the internet, I learnt that a special GROUP_CONCAT(expr) function can be used with the GROUP BY syntax, but it does not work with DB2 for z/OS.
Similar results could be archived programmatically, or using a UDF, or … using the new XML functions now available in DB2 for z/OS.
Since I never really played with XML functions, that was a good reason to start!

The following SQL, tested under DB2 version 10, provides the expected results. All the magic happens via the function XMLAGG. The rest (XML2CLOB, CAST, TRIM, or other REPLACEs) is just here to make the results “nicer”.
If you want to use it, just replace the table name (in red), and execute!

  SELECT I.CREATOR, I.TBNAME, I.CREATOR, I.NAME, I.UNIQUERULE,  
  TRIM(L ',' FROM REPLACE(REPLACE(CAST(XML2CLOB(                
  XMLAGG(XMLELEMENT(NAME "C", K.COLNAME, ',', K.ORDERING)       
       ORDER BY K.COLSEQ)                                     
  ) AS VARCHAR(2000)),'<C>',','),'</C>','')) AS "COLUMNS"       
  FROM  SYSIBM.SYSINDEXES I                                     
  INNER JOIN SYSIBM.SYSKEYS K                                   
  ON I.CREATOR = K.IXCREATOR AND I.NAME = K.IXNAME              
  WHERE I.TBNAME = 'PIN_ACCOUNT'                                
  GROUP BY I.TBCREATOR, I.TBNAME, I.CREATOR, I.NAME, I.UNIQUERULE
  ORDER BY I.TBCREATOR, I.TBNAME, I.CREATOR, I.NAME, I.UNIQUERULE ;

Sample output

  CREATOR   TBNAME       CREATOR   NAME      UNIQUERULE  COLUMNS
  $APEPCDB  PIN_ACCOUNT  $APEPCDB  XPEP0180  P           ACCTNUM,A,PIN_COMPANY_ID,A
  $APEPCDB  PIN_ACCOUNT  $APEPCDB  XPEP0280  D           BANK_NUMBER,A