Categories
Gigabyte Hardware

DIMM slots!

Even the most experienced PC builder can easily forget the importance of RTFM. When I built my FX-4350 based server (albeit in a bit of a hurry), I forgot to check which motherboard DIMM slots should be populated in a two-DIMM scenario. My motherboard is a Gigabyte GA-990FXA-UD3 990FX Socket AM3+ – it has four DIMM slots but I only wanted to populate two with 16 Gb in total. Needless to say I picked the wrong ones – and the performance was noticeably slower than expected.

RTFM! Or even easier … look at the colour of the DIMM sockets! Well … if your motherboard has different colours for each bank – only on Rev 4.0 and later did my motherboard have different coloured socket pairs.

Categories
4K Ultra HD Linux Ubuntu

First Impressions – Ubuntu 15.04 and 4K

I recently added an Asus PB287Q 4K monitor to my setup. Whilst a TN panel it is a truly excellent example of one. Running under Ubuntu 15.04 with an MSI GTX 960 Twin Frozr 4GB is a really nice experience – sure you have to play around with scaling to make sure you can read the text, but that is pretty trivial to sort out. And it is so much better than Windows under the same circumstances.

Note: I have yet to try Windows 10 on a 4K monitor – I am hopeful some of the scaling issues have been resolved. If not, I’ll run it in a VM 🙂

Categories
Peoplesoft PeopleTools SQL SQL Server Tuning

The hidden cost of CONVERT_IMPLICIT() …

There are numerous articles on the web about CONVERT_IMPLICIT() and how it can impact performance of queries in SQL Server. Recently I had cause to look at a SQL statement that referenced tables in two databases on the same SQL Server instance but running on different Peopletools releases. As one system is on PeopleTools 8.49 and the other is on 8.53, there is an underlying difference in how character table columns are created – 8.49 uses CHAR(), 8.53 uses NVARCHAR().

However, when you join tables from the 8.49 system to the 8.53 system on a character column such as EMPLID, SQL Server data type precedence rules will silently add a CONVERT_IMPLICIT() around the 8.49 CHAR() column to “upgrade it” to an NVARCHAR(). Therein lies a performance issue – with large tables on the 8.49 side we see significant spills to TempDB and even TempDB exhaustion in the worst case. Execution plans are adversely affected as a result of the loss of cardinality information as well.

The fix? CAST( … AS CHAR()) around the 8.53 column e.g.

 

1
WHERE CAST(A.EMPLID AS CHAR(11)) = B.EMPLID 

The moral of course of the story is always check your data types – especially if you are joining pre-8.5x and post-8.5x PeopleTools versions.

This is, of course, a generic issue. The Case for Specifying Data Types and Query Performance is an excellent article on the problems you might encounter using .Net or ORM database abstraction layers if you fail to specify your data types correctly.

 

Categories
Hardware

NVMe SSDs

I have just been reading and watching the reviews on the new Intel 750 and Samsung XS1715 NVMe SSDs. Very impressive benchmarks indeed. I run mostly AMD kit at home and as there are very few AMD motherboards with PCIe 3.0 x4 slots (the ASUS 990FX Sabertooth Gen 3 Rev 2.0 is the only one that comes to mind) I suspect I will have to wait a while. The motherboards for the next generation AMD Zen processors should include PCIe 3.0 x4 as standard by then and hopefully the price will have come down 😉

In truth, I find my AMD FX4350, FX6300 and Phenom II X4 965 Black Edition processors still meet my needs admirably for both general productivity and VM hosting under VirtualBox and VMWare. Overclock any of those processors, give them 16 or 32 gigabytes of RAM and use SSD for the operating system and the performance is really quite fabulous for what I do. None of my machines are going to win any gaming FPS awards but then I never play games on them anyway.

Categories
Peoplecode Peoplesoft PeopleTools SQL

RowInit PeopleCode vs Database Logic

Sometimes you need to do processing logic in RowInit PeopleCode that looks as though it is pretty harmless. But is it? Is RowInit always the correct place to do that logic?

Personally, I would nearly always recommend using RowInit PeopleCode as it is the “Peoplesoft Way” and PeopleSoft developers and functional consultants are more familiar with it. It is also generally easier to maintain and is database agnostic. But there are certain design patterns where I would consider moving logic to the database. Here is one such example: 

Categories
SQL Server Trace Flags

Trace Flag 2371

This trace flag (available in SQL Server 2008 R2 SP1 and later) alters the threshold calculation for auto statistics update on SQL Server instances so that larger tables do not require as many updates before statistics are updated i.e. the old 20% + 500 rows calculation does not apply for larger tables.

Personally, I would always set this as a start-up parameter on instances hosting PeopleSoft databases as in general those systems have a small number of very large tables which typically also have significant columns with a skewed data distribution.

Read more here

Categories
Hints and Tips Peoplesoft PeopleTools Tuxedo

Tuxedo 9.1 / Rolling Patch Install on Windows Server 2008 R2

It is well documented that the Tuxedo 9.1 install requires Windows Server 2003 SP1 compatibility mode to run successfully on later Windows server releases like 2008. Setting this against the executables is all well and good but the executable needs to be local to do that. You cannot set compatibility mode on an executable on a mapped drive. But there is a workaround:

Just wrap the installers in a batch file that includes the __COMPAT_LAYER environment variable set to WINSRV03SP1 and you are good to go e.g.

1
2
3
4
5
6
7
8
9
10
11
12
REM
REM Set Compatibility mode to Windows Server 2003 SP1
REM
SET __COMPAT_LAYER=WINSRV03SP1
REM
REM Run the Tuxedo 9.1 Install
REM
pstuxinstall.exe
REM
REM Run the Rolling Patch (RP095 in this case)
REM
R095_TUX91_I-WIN2003.exe

Enjoy.

Categories
Databases Peoplesoft PeopleTools SQL Server

PeopleSoft Integers

Peoplesoft allows you to create integer fields by specifying a number field with a given number of “Integer Positions” and Zero “Decimal Positions”. Application Designer maps these definitions at table create time to the underlying integer data types in the database. The data type the underlying table column gets depends on the number of integer positons specified. For example, on SQL Server any integer field up to 5 digits will map to a SMALLINT in the database. Integers with 6 to 10 digits will map to an INT. Beyond that a decimal field is used.

This introduces some interesting “features” of these fields:

  • If you define a two digit unsigned integer in Application Designer, then Peoplesoft will limit the input values to 00 through 99. But the column definition in the database will allow positive and negative values in the range -32,768 to +32,767. Any attempt to insert values outside this range will elicit a Arithmetic Overflow error from the database as you would expect.
  • As the database can accept values above the range that Peoplesoft allows, inserts into the tables using SQL in an Application Engine could potentially create values that would not display correctly within the application itself.
  • A 5 digit integer in PeopleSoft can have values up to 99999 – but the database will error above +32,767. A nice little “gotcha” there … 🙂
  • More interestingly if you decided to change a two digit unsigned integer field to (say) a 5 digit integer you would not need to alter the underlying table. In fact, Application Designer would not even generate a script for you as there would be nothing to change – 1 to 5 digit integers all map to a SMALLINT. If you increased the field to 6 or more integers then a change would be required as this would be mapped to an INT or even a DECIMAL in the database.
Categories
Windows

Setting Windows Compatibility Mode in Batch Files

Quick tip. Need to run an executable in a different compatibility mode? Set this environment variable appropriately prior to running the executable:

SET __COMPAT_LAYER=WIN95

Valid values for __COMPAT_LAYER:

WIN95 - Windows 95
WIN98 - Windows 98
WIN4SP5 - Windows NT 4.0 SP5
WIN2000 - Windows 2000
WINXPSP2 - Windows XP SP2
WINXPSP3 - Windows XP SP3
VISTARTM - Vista
VISTASP1 - Vista SP1
VISTASP2 - Vista SP2
WIN7RTM - Windows 7 
WINSRV03SP1 - Windows Server 2003 SP1
WINSRV08SP1 - Windows Server 2008 SP1

 

Categories
PeopleTools Security

PeopleTools Roles and Permission Lists

The problem with the standard roles/permissions lists supplied with PeopleTools is that they get overwritten during a PeopleTools upgrade. So it really isn’t wise to modify the supplied definitions. Clone them and give those to your users if you really must modify them. It might **seem** the quicker method to modify the supplied definitions but you will probably pay for it in the end 🙂

Even if you don’t modify them always be aware that Oracle may add or remove permissions so a quick compare of the permissions after a PeopleTools upgrade/patch is well worth the effort.