developing on sql azure

46
Top 5 Things Developers Should Know @ SQL Azure By Ike Ellis http://www.ellisteam.net @ike_ellis [email protected] P: 619.922.9801

Upload: ike-ellis

Post on 15-Nov-2014

1.935 views

Category:

Technology


4 download

DESCRIPTION

This is the slide deck from my SQL In The City presentation in LA on October

TRANSCRIPT

Page 1: Developing on SQL Azure

Top 5 Things Developers Should Know @SQL Azure

By Ike Ellishttp://www.ellisteam.net@[email protected]: 619.922.9801

Page 2: Developing on SQL Azure
Page 3: Developing on SQL Azure
Page 4: Developing on SQL Azure
Page 5: Developing on SQL Azure
Page 6: Developing on SQL Azure
Page 7: Developing on SQL Azure
Page 8: Developing on SQL Azure
Page 9: Developing on SQL Azure
Page 10: Developing on SQL Azure
Page 11: Developing on SQL Azure
Page 12: Developing on SQL Azure
Page 13: Developing on SQL Azure

Before the DragonsQuick Demo: How to Sign Up• Free Accounts– BizSpark– MSDN Subscription– 30 day trial• Bing SQL Azure 30 day trial….there are coupons and

instructions.• Look on the SQL Azure Team Blog

– Remember: Microsoft wants you to use this, there’s a way to try it for free…

Page 14: Developing on SQL Azure

Architecture

Page 15: Developing on SQL Azure

Before the Dragons: Architecture -Logical/Physical Databases/Servers

Page 16: Developing on SQL Azure

Dragon #1: The ConnectionString

Page 17: Developing on SQL Azure

Your App

Change Connection String

Your SQL Server

SQL Azure

Page 18: Developing on SQL Azure

5 Things Make Up a Connection String

• What are they?

Page 19: Developing on SQL Azure

5 Things Make Up a Connection String

• What are they?– UserName– Password– Database(Catalog)– ServerName– ProviderName

Page 20: Developing on SQL Azure

#1 ConnectionString

<add name="FlashcardEntities" connectionString="metadata=res://*/Models.FlashcardData.csdl|res://*/Models.FlashcardData.ssdl|res://*/Models.FlashcardData.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=etnejn2aev.database.windows.net;Initial Catalog=flashcards;Integrated Security=False;

User ID=***(username@servername);Password=*******;

MultipleActiveResultSets=True;Encrypt=True(negotiated);TrustServerCertificate=False&quot;" providerName="System.Data.EntityClient" />

Page 21: Developing on SQL Azure

Connection Providers• Use ADO.NET, ODBC, PHP (NOT OLE DB)

– Client libraries pre-installed in Azure roles– Support for ASP.NET controls

• Clients connect directly to a database– Cannot hop across DBs (no USE)– May need to include <login>@<server>– Use familiar tools (sqlcmd, osql, SSMS, etc)– Use connection pooling for efficiency

• SSMS 2008 R2 can connect – http://blogs.msdn.com/ssds/archive/2009/11/11/9921041.aspx

• SSRS, SSIS, SSAS can all connect to SQL Azure using the right provider.

Page 22: Developing on SQL Azure

Typical ADO.NET Connection.Open()

try{ using (SqlConnection conn = new SqlConnection(sqlConnectionString)) {

using (SqlCommand cmd = new SqlCommand(sqlStatement, conn)) {

conn.Open(); using (SqlDataReader dr = cmd.ExecuteReader())

{ while (dr.Read()) {

} }

} }}catch (SqlException ex){

SxpLog.WriteSqlException(ex, "some", "other", "data");}

Page 23: Developing on SQL Azure

New Connection.Open())

string sqlContext = string.empty;try{

using (SqlConnection conn = new SqlConnection(sqlConnectionString)) {

using (SqlCommand cmd = new SqlCommand(sqlStatement, conn)) {

sqlContext = GetSqlContextInfo(conn); using (SqlDataReader dr = cmd.ExecuteReader())

{ while (dr.Read()) { }

} }

}}catch (SqlException ex){

SxpLog.WriteSqlException(ex, sqlContext, "some", "other", "data");}

Page 25: Developing on SQL Azure

Dragon #2: Throttling, Disaster Recovery, & Some New Errors

Page 26: Developing on SQL Azure

Throttling

Page 27: Developing on SQL Azure

Throttling• Throttling Service– Protects a machine from sustained high usage of system

resources– Evaluate actual resource usage vs. safe thresholds real-

time– Throttle the busiest days first

• Throttling shows as connection error 40501– The service is currently busy. Retry the request after 10

seconds…• Needs Decoding

Page 28: Developing on SQL Azure

Throttling Scenario #1

• Customer A uses 30% of the CPU on the server• Customer B comes in and starts using 70% of the CPU

on the server• Customer B triggers the throttling event• Customer B gets throttled

Page 29: Developing on SQL Azure

Throttling Scenario #2

• Customer B uses 70% of the CPU on the server• Customer A comes in and uses 30% of the CPU on

the server• Customer A triggers the throttling event• Customer B gets throttled

Page 30: Developing on SQL Azure
Page 32: Developing on SQL Azure

Another Reason We Need Retry Code = Disaster Recovery/Database Replicas

Page 33: Developing on SQL Azure

Dragon #2: Some New Errors1. 40550 - Session has been terminated because it has acquired too many locks. Try reading or

modifying fewer rows in a single transaction. (Greater than 1,000,000 locks)

2. 40551 - Session has been terminated because of excessive TempDB Usage(TempDB is only allowed to be 5GB in size)

3. 40552 - Session used too much of the transaction log. try modifying fewer rows in a single transaction. (Transaction consuming excessive log resources are terminated. The max permitted log size for a single transaction is 1GB)

4. 40544 - Database reached it's max size. Switched to read-only

5. 40553 - Session is terminated because of excessive memory usage. (Where there is memory contention, sessions consuming greater than 16MB for more than 20 seconds are terminated in the descending order of time the resource has been held)

6. 40549 - Session is terminated because of a long running transaction (SQL Azure kills all transactions after 24 hours.)

7. 40501 The service is currently busy. Retry the request after 10 seconds. Code: %d (SQL Azure might terminate the transactions and disconnect the sessions when the CPU utilization, input/output I/O latency, and the number of busy workers exceed thresholds.

Page 34: Developing on SQL Azure

Dragon #3: Tooling

• SQL Azure Database Manager– Silverlight Tool

• SSMS 2008 R2– Standard Tool

Page 35: Developing on SQL Azure

Dragon #4: DB Migration

• SSIS• BCP• SSMS – Generate Scripts• DEMO: SQL Azure Migration Wizard

Page 36: Developing on SQL Azure

Dragon #5: Performance Tuning

• Let’s get this out of the way – What we don’t have:• no sql error log• no sql profiler• no pssdiag• no bpa (best practices analyzer)• no xevent• no server side network capture• no mps reports(microsoft product support reports)• Only some DMVs

Page 37: Developing on SQL Azure

SQL Azure Performance Guide1) Missing Indexes or better indexes

1) Use DMVs2) Use Query Plans

2) Covering indexes for the WHERE clause3) Can sorting be done on the client?4) Minimize round trips5) Limit records (paging)6) Use Connection Pooling (open connection late, close them early)7) Retry Logic (wait 10 seconds and then retry)8) Catch errors and understand that when azure throws an error, the tran rollback9) Caching and batching - evaluate caching and batching to limit round-trips to the server10) avoid latency - choose a data center nearest to your location11) Trace connections - traced connections using context_info() to troubleshoot connectivity issues12) CALL SUPPORT

Page 38: Developing on SQL Azure

What I Didn’t Cover, But You Might Want to Research

• Pricing• Included/Excluded Features• Product Roadmap• SQL Azure Reporting• Backup/Restore Options• SQL Azure Data Sync• SQL Azure Odata• Future Differences Between Editions

Page 39: Developing on SQL Azure

Good Resources• SQL Azure Team Blog & Twitter

– http://blogs.msdn.com/b/sqlazure/– Twitter: @sqlazure

• Inside SQL Azure – Kalen Delaney– http://social.technet.microsoft.com/wiki/contents/articles/inside-sql-azure.aspx

• SQL Azure & Entity Framework – Julie Lerman– http://msdn.microsoft.com/en-us/magazine/gg309181.aspx– Doesn’t cover the retry issue.

• My Site – Ike Ellis– http://www.ellisteam.net– Twitter: @ike_ellis

• .NET ROCKS – SQL Azure Migration Wizard – December, 2009– http://www.dotnetrocks.com/default.aspx?showNum=512

• Scott Klein & Herve Rogerro Book– http://

www.amazon.com/Pro-Azure-Experts-Voice-NET/dp/1430229616/ref=sr_1_1?ie=UTF8&qid=1297792245&sr=8-1

• MY O’REILLY BOOK IS COMING THIS SPRING!– Yes, it has an animal cover.

Page 40: Developing on SQL Azure

Red Gate Tools for SQL Azure

• SQL Compare• SQL Data Compare• SQL Azure Backup

Page 41: Developing on SQL Azure

• SQL Azure focus on logical administration– Schema creation and management– Query optimization– Security management (Logins, Users, Roles)

• Service handles physical management– Automatically replicated with HA “out of box”– Transparent failover in case of failure– Load balancing of data to ensure SLA

DBA role places more focus on logical management

Page 42: Developing on SQL Azure

Database Backup Today = Full Copy

Page 43: Developing on SQL Azure

Backup / Restore – Database Copy

• CREATE DATABASE TechBio2 AS COPY OF servername.TechBio

• Select * from sys.dm_database_copies• No point in time

Page 44: Developing on SQL Azure

Hope for the Future

Page 45: Developing on SQL Azure

Until Then

• Red-Gate has a tool– No Point In Time Restore– Brings the database on-premise! And Restores

from on-premise!

Page 46: Developing on SQL Azure

Contact Ike

• Email: [email protected]• Twitter: @ike_ellis• Website: http://www.ellisteam.net• Phone: 619.922.9801• User Group: http://www.sdtig.com• DevelopMentor Courses: http://www.develop.com