SurviveJava_dfwx

Download Report

Transcript SurviveJava_dfwx

Weird Stuff I Saw While ...
Supporting a Java Team
Rick Lowe
[email protected]
@dataflowe
What I’m Not
 I am not a Java Expert
 I deny that I’m a developer
 Probably not especially knowledgeable about
using MSSQL from Java
 …
 I am interested in starting a conversation
about these issues
2 | 10/10/2015
Session Title Here
Example 1 : Looking for the cache
3 | 10/10/2015
Session Title Here
SelectMethod Options
 “SelectMethod = full” : client retrieves entire
result set
 “SelectMethod = cursor” : server side cursor
 “responseBuffering=adaptive” : Results
retrieved as they are needed
 Some are unaware of adaptive buffering.
 Adaptive buffering is default in JDBC 2.0 and
later
4 | 10/10/2015
Session Title Here
Server Side Cursors




Works much like a normal cursor
Cursor is created from a query and opened
Results are read back row-by-agonizing-row
Every single one of these steps involves a
trip across the network
 One row at a time minimizes memory
requirements on the client
5 | 10/10/2015
Session Title Here
Removing server side cursors
 Not just annoying - potential performance
issue
 In recent JDBC versions, simply remove
“SelectMethod=cursor” from URL
 Evaluate on test system first
 Workloads do exist where cursors are
appropriate from a client side perspective
6 | 10/10/2015
Session Title Here
Example 2 : Conversion to CRUD
7 | 10/10/2015
Session Title Here
How things work in ADO.Net
 try {
mySqlCommand.executeUpdate();
} catch ….
 executeUpdate() is not actually void, it
returns # of rows imapacted.
 … except we usually use NOCOUNT which
means the return is always 0
 And errors are more interesting than counts
8 | 10/10/2015
Session Title Here
How things work in Java
 PreparedStatement.executeUpdate() returns
the number of rows impacted
 … and it often actually gets paid attention to
 When inserting, often check for return == 1
 Quick fix is to remove “SET NOCOUNT ON”
from Create stored procedures
9 | 10/10/2015
Session Title Here
Example 3 : OUTPUT parameters
10 | 10/10/2015
Session Title Here
It all seemed so easy…
 PreparedStatement.executeUpdate() will not
allow you to simply ignore parameters
 PreparedStatement does not understand
output parameters
 Must use PreparedCall instead
 To add confusion, there’s a new weird syntax
you can use
11 | 10/10/2015
Session Title Here
Windows Authentication
 Doesn’t work.
 Just kidding, it works. It just doesn’t work by
default.
 Setup depends on version
12 | 10/10/2015
Session Title Here
Prior to JDBC 4
 Copy sqljdbc_auth.dll from
<jdbc>\sqljdbc_version\<language>\auth\<arc
h> to windows\system32
 Be sure to grab the correct architecture – x86
vs x64
 Then integratedSecurity=SSPI will work as
expected.
 Alternately, use the –Djava.library.path
13 | 10/10/2015
Session Title Here
Starting With JDBC 4





Can still use sqljdbc_auth
Alternately, can use Java Kerberos
authenticationScheme=JavaKerberos
integratedSecurity=true
Must now specify FQDN for server name
14 | 10/10/2015
Session Title Here
V1 Enterprise Java Beans
 Enterprise Java Beans help encapsulate DB
code
 Developers implement methods to Create,
Update, and Delete records
 Called automatically as code works with
objects
 Issue with early versions – update method
can be called whether or not data changes
15 | 10/10/2015
Session Title Here
The Talk
16 | 10/10/2015
Session Title Here
Query Hints
 In .Net shops, the NOLOCK wars rage on
 Abusing hints is a bad habit …
 … So we shouldn’t expect that getting folks to
stop using NOLOCK just because we tell
them the 101st time.
 We usually settle for making our personal
sandbox a “no smoking zone”
17 | 10/10/2015
Session Title Here
Query Hints Contd.
 Java people typically aren’t used to the
Microsoft stack
 This may be a new discussion for them
 There is still room to change habits in this
community
18 | 10/10/2015
Session Title Here