Windows 2008 64-bit can cause a significant CPU increase and I/O degradation when Domino opens many databases

Had a customer report the above issue and have it fixed by IBM so I thought others might benefit from it. The issue has been fixed as IBM SPR# KBRN8AKKA9. The technote is 1449825 and contains a lot of good info. Setting notes.ini “Disable_Random_RW_File_ATTR=1” fixes the issue.

“After Domino opens many NSF files in quick succession during a backup, the Virtual Address Space of the OS system cache may be completely used up (for example, 1TB of data may be used in this OS cache). Successive calls into the OS cache manager to get memory from the OS system cache then results in mapping/unmapping of views from the system cache. These mapping/unmapping operations takes a lot of CPU time and as a result shows as high OS CPU usage. In addition, because the large OS system cache may now reside on the disk (the RAM is not large enough to hold the OS system cache) this results in significant I/O on the system.”

How to install Lotus Quickr connector on 64-bit OS

Received these steps from a coworker and thought I would publish for the greater good if others need it. Thanks Bjarne.

After downloading the connector to Lotus Quickr and trying to install it I found out that wasn’t possible to install the Lotus Quickr connector on Vista 64-bit or Windows 7 64-bit. I searched the internet and found a solution but unfortunately it didn’t work. After messing around I got it working.

  1. Download the Lotus Quickr connector from your Lotus Quickr site
  2. Execute the file – Click on OK when the error pops up and end the installer.
  3. Browse to the following folder Users<username>AppDataLocalTemp and copy the file qkrconn.msi to another location.
  4. Download and install Orca. This application allows you to modify MSI files.
  5. Open the qkrconn.msi with Orca and scroll down to the “LaunchCondition” table located on the left.
  6. Delete the condition “(Not Intel64) And (Not VersionNT64) And (Not Msix64)” by right clicking it then selecting “Drop Row”. You can delete both rows because they are not needed (I did that)
  7. In the table located on the left, click in the value “InstallExecuteSequence” and find the row “LaunchCondition” and delete it by right clicking it then select “Drop Row”.
  8. In the table located on the left, click in the value “InstallUISequence” and find the row “LaunchCondition” and delete it by right clicking it then select “Drop Row”.
  9. Save, exit and run the MSI!


Rearming Windows Vista

While cleaning up today I found an interesting piece of information in the Microsoft Action Pack material. It appears that the 30 day grace period of Windows Vista can be extended to 90 days by rearming the installation (you should also disable auto-activation during the installation). This is great for testing purposes.

To rearm Windows start a command-prompt with admin. privileges and run

cscript %windir%system32slmgr.vbs -rearm

The script can also be used to active Windows using the -ipk switch followed by the 25 digit activation code.

Show ‘n Tell Thursday: Finding the “My Documents”-folder (17 August 2006)

Finding the correct path to write the file to when writing export routines or other routines that write files to the active users computer has always been a problem. Normally I have ended up using a path from a user profile document or by simply using the root of the C-drive. This has served me well but the optimal solution would be using the “My Documents”-folder of the user instead. This alliviates a number of problems that might otherwise occur:

  • The user may not have a C-drive
  • The user may not have permissions to write to the C-drive
  • The user may expect the file to go some place else than the root of the C-drive

Using the “My Documents”-folder is now the preferred way to doing it from my perspective. So how do we get at the actual path of the folder? You could use the HOMEDRIVE and HOMEPATH environment variables like this:

Dim export_path As String
export_path = Environ(|HOMEDRIVE|) + Environ(|HOMEPATH|) + "My Documents"

This will work for many users but not on my machine since I have remapped the location of the “My Documents”-folder to C:Data (the above will result in “C:Documents and Settingslekkim.HQMy Documents”). It also wouldn’t work if the users “My Documents”-folder has been mapped to a network location via Active Directory policies.

As it turns out it is a little difficult to get the location of the users “My Documents”-folder since there isn’t an environment variable that holds this piece of information. The solution is to use the SHGetFolderPath function of the Windows API.

Start by declaring the function in the Declarations section of your code. Also declare a number of constants for the “My Documents” and “My Pictures”-folders:

Declare Function SHGetFolderPath Lib "shfolder.dll" Alias "SHGetFolderPathA" (Byval hwndOwner As Long, Byval nFolder As Long, Byval hToken As Long, Byval dwReserved As Long, Byval lpszPath As String) As Long
Private Const MY_DOCUMENTS& = &H5
Private Const MY_PICTURES& = &H27
Private Const HWND_CURRENT_WINDOW& = &H0

Since the returned string will be 0-terminated as C-strings are we need a utility function to crop the returned result:

Private Function TrimNull(startstr As String) As String
   Dim i As Integer
   Dim char As String
   For i=Len(startstr) To 1 Step -1
      char = Mid$(startstr, i, 1)
      If Asc(char) = 0 Then
         TrimNull = Mid(startstr, 1, i-1)
      End If
End Function

Finally we need a utility function to make it easier to call the SHGetFolderPath function:

Private Function GetFolderPath(folder As Long) As String
   Dim buff As String

   'fill buffer with the specified folder item
   buff = Space$(256)
   If SHGetFolderPath(-1, folder, -1, &H27, buff) = 0    Then
      GetFolderPath = TrimNull(buff)
   End If
End Function

Putting it all together means that we can get the “My Documents” or “My Pictures” folder as easy as the following:

Dim export_path As String
export_path = GetFolderPath(MY_DOCUMENTS)
Msgbox "My Documents is at: " & export_path

export_path = GetFolderPath(MY_PICTURES)
Msgbox "My Pictures is at: " & export_path

That’s it! You can get more constants for the SHGetFolderPath function by looking up the function in a Windows API reference.