Henry's profileUtterances on Software E...PhotosBlogLists Tools Help
    January 09

    Upgrading assemblies in the Global Assembly Cache is horror

    First, there is this http://support.microsoft.com/default.aspx/kb/905238 (http://blogs.msdn.com/astebner/archive/2007/02/08/assemblies-may-be-missing-from-the-gac-or-winsxs-cache-after-an-msi-major-upgrade.aspx,http://blogs.msdn.com/astebner/archive/2007/09/06/4798334.aspx).

    This makes it hard for people shipping shared assemblies using merge modules. Then, there are all those clients of the assembly referencing the old version. Publisher policy may or may not work.

    So, basically, we need to ship all versions, but with different ComponentID values.

    And pray, we won't need a patch.

    January 08

    INSTR and SUBSTR performance on Oracle database systems

    The largest string PL/SQL can handle is NVARCHAR2(32767).

    If you need larger strings, you need to use the NCLOB datatype.

    But although SUBSTR and INSTR work on this datatype, too, performance is abysmal, your CPU and RAM will burn and your disks will get rills on the TEMP tablespace.

    This is when you turn over to the DBMS_LOB package that provides specialized support for accessing large objects, including INSTR and SUBSTR on NCLOB types.

    However, INSTR is still slow.

    In fact, it is so slow, it's useful to SUBSTR the NCLOB into NVARCHAR(32767/n) chunks and INSTR those chunks.

    I went from 23 seconds to 0.15 seconds splitting a 230 KiB NCLOB on a ML370.

    I probably should go and double-check the result. Everything can be fast if it doesn't have to be correct.

    Update: DBMS_LOB.SUBSTR will return 32767/n characters, where n is the maximum byte-width of the target character set, e.g. 3 for UTF-8.

    January 04

    HP ProLiant ML350 G5 Disk Failures and Lockup/Freeze

    From my experience, HP ProLiant servers are quite good value for the buck, although it's quite a lot of buck, actually, and the tag "server" is really only applicable to the machines greater than a ML150.

    The configuration and maintenance software is usable and doesn't make management too hard.

    I'm using 412645-B21 (ProLiant ML350 G5), 436013-L21 (E5345, Intel Quad-Core Xeon), 351580-B21 (E200 128MB BBWC) and 395473-B21 (500GB 7.2k HP SATA), theoretically a dream machine, but as so often with my hardware choices, a recipe for disaster.

    You don't want to use the E200 RAID controller: https://forums12.itrc.hp.com/service/forums/questionanswer.do?threadId=1154084

    It is a horrible experience getting the HP service to analyze and acknowledge such an issue. Their strategy:

    1. Blame the customer

    1a. It's a software issue. The customer uses uncertified applications, wrong drivers, old firmware.

    1b. It's a customer configuration issue. The customer uses uncertified parts.

    2. Replace the hell out of the machine

    2a. Replace disks.

    2b. Replace the controller.

     

    They'd save a ton of cash assuming a firmware problem in the first place. Especially when so many people over such a long time encounter identical issues.