2011-11-10 10 views
7

Sprawdzam narzędzie do obsługi wielu podmiotów korzystających z serwera SQL Server. Rozważam udostępnioną bazę danych, wspólny schemat i filtr widoku dzierżawcy opisany tutaj. Jedyną wadą jest rozdrobniony puli połączeń ...Wydajność pofragmentowanej puli połączeń programu SQL Server w aplikacjach dla wielu dzierżawców

Per http://msdn.microsoft.com/en-au/architecture/aa479086, Lokator Zobacz Filtr jest opisana w następujący sposób:

„SQL widoki mogą być wykorzystywane do udzielania indywidualnych lokatorów dostęp do niektórych wierszy w danej tabeli, uniemożliwiając dostęp do innych wierszy:

W języku SQL widok jest tabelą wirtualną zdefiniowaną przez wyniki zapytania SELECT, a wynikowy widok można następnie zapytać i zastosować w procedurach przechowywanych tak, jakby był Faktyczna tabela bazy danych Na przykład: poniższa instrukcja SQL tworzy widok tabeli o nazwie Pracownicy, która została przefiltrowana w ten sposób t tylko wiersze należące do jednego najemcy są widoczne:

CREATE VIEW TenantEmployees AS 
SELECT * FROM Employees WHERE TenantID = SUSER_SID() 

To stwierdzenie otrzymuje identyfikator zabezpieczeń (SID) konta użytkownika dostępu do bazy danych (co, będziesz Przypomnijmy, to konto należących do najemcy, nie użytkownik końcowy) i wykorzystuje je w celu określenia, które wiersze powinny być zawarte w widoku”

myślenia to dzięki, jeśli mamy jedną bazę danych przechowującą powiedzieć 5,000 różnych lokatorów, to pula połączenie jest całkowicie pofragmentowane i za każdym razem, gdy zapytanie jest wysyłane do bazy danych ADO.NET musi ustanowić nowe połączenie i uwierzytelnić (pamiętaj, że tworzenie połączeń działa dla każdego unikalnego ciągu połączenia), a to oznacza, że ​​masz 5000 ciągów połączeń ...

Jak bardzo powinienem się tym przejmować? Czy ktoś może mi podać przykłady z prawdziwego świata, jak znaczący wpływ ma puli połączeń na zajęty serwer bazy danych dla wielu dzierżawców (np. Obsługa 100 żądań na sekundę)? Czy mogę po prostu rzucić więcej sprzętu na problem i znika?

Myśli?

+0

Planujesz posiadania każdy lokator ustalenia ich połączenia z SQL Server, lub planujecie posiadający usługę pośrednika (npWCF), w którym przesyłane są wszystkie żądania? – Alexander

+0

W skrócie: to, co opisują lekarze, to zły pomysł ... – usr

Odpowiedz

1

Moja sugestia to opracowanie solidnego interfejsu API w bazie danych. Skalowalność, modułowość, rozszerzalność, rachunkowość będą głównymi powodami. Kilka lat później możesz znaleźć przysięganie, że grasz z SUSER_SID(). Na przykład, rozważ wielu najemców zarządzanych przez jedno konto lub sytuacje takie jak whitelabele ...

Masz api do dostępu do danych, które zajmie się uwierzytelnianiem. Nadal możesz autoryzować na poziomie DB, ale to jest zupełnie inny temat. Mieć użytkowników i być może grupy i udzielać im pozwoleń na lokatorów.

Mimo to w przypadku dużych projektów lepszym rozwiązaniem będzie posiadanie pojedynczej bazy danych na jednego gracza.

Widzę, że nie odpowiedziałem na twoje główne pytanie dotyczące wydajności pofragmentowanych pul połączeń, ale jestem przekonany, że istnieje wiele ważnych argumentów, aby nie podążać tą ścieżką.

Powiązane problemy