In this article we are going to look at 10 tips you can perform on your BizTalk environment with less effort and maximize your performance. Often times it may be too late to impose some best practices on your BizTalk solutions, things like orchestration best practices like reducing number of persistence points, Pipeline best practices like using streams instead of XmlDocuments
etc. In those scenarios, you are left with whatever tuning you can do on an infrastructure level and get maximum performance. You can also follow these tips, when you got a fresh environment and don’t know where to start.
1. Create a dedicated tracking host
A tracking host is vital for overall health of your BizTalk environment; it’s responsible for moving all the DTA and BAM tracking data from your message box database to BAM and DTA database. If you don’t have a tracking host, over a period your message box will get bloated and degrades you’re overall environment performance.
The general rule of thumb in creating dedicate tracking host is N + 1, where N is number of message box databases in the environment. If you got single message box, then you need to have 2 dedicated tracking host instances deployed in 2 servers. The second one for fault tolerance, there can only be one tracking host per message box. Having additional tracking host doesn’t add any value. Read more
2. Take a look at tracking?
Take a deeper look at your tracking configuration. If you are not relying on tracking data for your support/diagnosis/governance then it may be worth turning them off.
You can turn tracking on/off
at a global level just by flicking this switch. If you don’t need tracking then turn it off.
By default Shape start/stop is tracked. This is useful if you are debugging orchestrations via orchestration debugger. In a production environment it’s very unlikely (or you shouldn’t) to use orchestration debugger. So turn off tracking for those events.
Turn off tracking at pipeline level, because having tracking at pipeline level will track all the send/receive ports using those pipelines. If you really want to track something, then use the port level tracking.
3. Install SQL Service Packs and cumulative updates
This may sound trivial, but it’s very important you always apply the latest service packs and cumulative updates to BizTalk Server, SQL Server and .NET framework. Every service packs will have tons of bug fixes and performance improvements, this is one cheap way of getting additional performance gains. Here is the list of all the service pack and CU for BizTalk
4. Verify that the SQL Agent Jobs are running
This is one of the common causes of performance problems in BizTalk environment. Make sure all the BizTalk SQL server jobs
are running without any errors as expected (Note: Not all the jobs are supposed to run, some of them are internally called and not enabled). For the SQL jobs to be running, you also need to make sure SQL agent is started and running. If your SQL jobs are not running, it will quickly bloat your message box and tracking database. Also don’t try to change any default schedules of SQL jobs.
5. Change databases auto-growth settings
SQL Server database auto-growth is a blocking operation, which effects BizTalk Server database performance. Therefore it is important to allocate sufficient space for the BizTalk Server databases usually few megabytes (ex: 100mb) in advance. Don’t set a low value like 10MB, you will see a tooth saw effect in performance, where SQL server always competing to allocate space.
6. Separation of data files and log files
This is one of the SQL server best practices that work very well for BizTalk server to reduce I/O contention. On a high throughput system, message box and tracking database (also BAM database if you are using it) will incur high I/O contention. So it’s better to separate them into different disk and also make sure the data and log files are in separate drive and not fighting for resources.
7. Set Min and Max Server SQL Server Memory
In majority of the organisations BizTalk servers will be hosted on a dedicated SQL Server(s). When the computers running SQL Server that host the BizTalk Server databases are dedicated to running SQL Server, we recommend that the ‘min server memory’ and ‘max server memory’ options on each SQL Server instance are set to specify the fixed amount of memory to allocate to SQL Server. In this case, you should set the “min server memory” and “max server memory” to the same value (equal to the maximum amount of physical memory that SQL Server will use). This will reduce overhead that would otherwise be used by SQL Server dynamically managing these values.
8. Disable hyper-threading on BizTalk & SQL Servers
It is critical that hyper-threading be turned off for BizTalk Server computers. This is a BIOS setting, typically found in the Processor settings of the BIOS setup. Hyper-threading makes the server appear to have more processors/processor cores than it actually does. When BizTalk Server counts the number of processors to adjust its self-tuning algorithms, the hyper-threaded processors cause these adjustments to be skewed, which is detrimental to overall performance.
Hyper-threading should be turned off for SQL Server computers because applications that can cause high levels of contention (such as BizTalk Server) may cause decreased performance in a hyper-threaded environment on a SQL Server computer.
: Please read the comments chain, you don’t need to do this in all the scenarios.
9. Configure antivirus software
Normally the best approach for BizTalk environment and anti-virus software is using a perimeter based approach, where you normally don’t run the anti-virus software on the machine itself but protect the boundaries. But it may be difficult to convince the security teams to take that approach. In those cases, you disable real-time scanning of non-executable file types referenced by any BizTalk Server receive locations (usually .XML,.csv, .txt, etc.) and configure antivirus software to exclude scanning of BizTalk Server executable files
10. Disable non-essential services
Every bit of resources that you can save in a BizTalk/SQL server is going to boost your performance by little bit. Typically there are numerous services that are started by default on your BizTalk/SQL servers. It’s worth spending some time and turning off the services that are not essential .
There are still various tuning exercise you can do to get maximum performance out of your environment. I just highlighted the top 10 tips to get you started. Here are some of the external links worth checking
BizTalk Health Check
BizTalk Performance Optimization Guide