- Wiersz powstaje przy pierwszym logowaniu sesji i odpowiada jednemu zajętemu stanowisku licencyjnemu.
- Identyfikator sesji w kolumnie
SESSIONIDodróżnia równoległe połączenia tego samego użytkownika. - Adres IP i nazwa hosta pozwalają ustalić, z którego stanowiska nastąpiło logowanie — także przy pracy zdalnej.
- Tabela odpowiada na praktyczne pytanie przed zakupem rozszerzenia: ile stanowisk jest zajętych w godzinach szczytu.
Do czego służy tabela [dbo].[_licencja]
Licencja na oprogramowanie magazynowe jest zwykle liczona stanowiskami pracującymi równocześnie, a nie liczbą założonych kont. Różnica bywa znaczna: firma z sześćdziesięcioma kontami może potrzebować dwudziestu stanowisk, bo magazynierzy pracują na zmiany. Tabela [dbo].[_licencja] pozwala tę różnicę zmierzyć zamiast szacować.
Wiersz jest zakładany przy pierwszym logowaniu danej sesji i zawiera cztery informacje istotne dla rozliczenia: login, identyfikator sesji, adres IP oraz nazwę hosta. Kolumna SESSIONID ma tu znaczenie szczególne — to ona, a nie login, odpowiada zajętemu stanowisku. Jeden użytkownik zalogowany na komputerze i na terminalu mobilnym zajmuje dwa.
Zapis adresu IP i hosta pełni podwójną funkcję. Przy rozliczeniu licencji pozwala oddzielić stanowiska stacjonarne od pracy zdalnej. Przy analizie bezpieczeństwa — zauważyć logowania z adresów spoza sieci firmowej albo o nietypowych porach, co bywa pierwszym sygnałem udostępnienia konta osobie nieuprawnionej.
Stanowisko zajmuje sesja, nie konto — użytkownik zalogowany jednocześnie na komputerze i terminalu mobilnym liczy się dwukrotnie.
Budowa tabeli — wykaz kolumn
Osiem kolumn opisuje jedno zdarzenie: rozpoczęcie sesji zajmującej stanowisko licencyjne.
| Kolumna | Typ | Wymagana | Znaczenie |
|---|---|---|---|
HOST | varchar(max) tekst bez limitu długości | nie | Host, z którgo nastapiło logowanie użytkownika |
ID_LICENCJA | int liczba całkowita | tak | Unikalny identyfikator wiersza tabeli |
IP | varchar(50) tekst do 50 znaków | nie | Adres IP, z którego nastąpiło logowanie użytkownika |
KIEDY | datetime data i godzina | tak | Data i czas pierwszego logowania użytkownika |
SESSIONID | varchar(250) tekst do 250 znaków | tak | Unikalny identyfikator wiersza w bazie |
STAMP | timestamp znacznik wersji wiersza | tak | Unikalny identyfikator wiersza |
SYSTEMOWE | bit wartość logiczna 0/1 | tak | Oznaczenie czy zapis w bazie ROOT jest systemowy i czy będzie instalowany podczas synchornizacji struktury bazy danych |
USERNAME | varchar(50) tekst do 50 znaków | tak | Login użytkownika |
Kolumna KIEDY przechowuje moment pierwszego logowania danej sesji, nie każdego kolejnego odświeżenia strony. Pozwala to policzyć rzeczywistą liczbę rozpoczętych sesji, a nie żądań wysłanych do serwera.
Indeksy i wydajność zapytań
Tabela jest zapisywana częściej niż odczytywana — analiza wykorzystania licencji odbywa się okresowo, a nie w trakcie pracy użytkowników.
| Indeks | Kolumny | Rodzaj |
|---|---|---|
PK__licencja | ID_LICENCJA | klucz główny |
Klucz główny na kolumnie ID_LICENCJA wystarcza przy typowym zastosowaniu. Jeżeli analiza wykorzystania jest wykonywana regularnie na dużym zbiorze, warto rozważyć indeks na kolumnie KIEDY — zapytania o szczyt obciążenia zawsze zawężają zakres dat.
Jak zmierzyć rzeczywiste zapotrzebowanie na stanowiska
Pytanie „ile licencji potrzebujemy” pada zwykle przy rozbudowie magazynu albo przy odnowieniu umowy. Odpowiedź oparta na liczbie pracowników niemal zawsze zawyża potrzeby, bo nie uwzględnia zmianowości.
- Policz sesje, nie konta. Liczba założonych loginów jest górnym ograniczeniem, które w praktyce nigdy nie zostaje wykorzystane naraz.
- Znajdź godzinę szczytu. Obciążenie w magazynie rozkłada się nierównomiernie — najwyższe przypada zwykle na przyjęcia rano i wysyłki po południu.
- Sprawdź kilka dni, nie jeden. Poniedziałek i dzień po święcie wyglądają inaczej niż środa; miarodajny jest tydzień pracy.
- Uwzględnij terminale mobilne. Magazynier z kolektorem i dostępem do komputera zajmuje dwa stanowiska, jeśli obie sesje są aktywne.
- Zostaw zapas. Osiągnięcie limitu oznacza, że kolejna osoba nie zaloguje się do systemu — a zdarza się to w najgorszym możliwym momencie, czyli w szczycie.
Warto też odróżnić sesje faktycznie pracujące od pozostawionych otwartych. Przeglądarka niezamknięta po zakończeniu zmiany potrafi utrzymywać sesję do czasu jej wygaśnięcia, zawyżając pomiar. Ustawienie rozsądnego czasu bezczynności rozwiązuje ten problem i jednocześnie zwalnia stanowiska dla osób, które faktycznie ich potrzebują.
Jak korzystać z tabeli w praktyce
Przy analizie wykorzystania licencji i kontroli dostępu przydają się poniższe uwagi:
- Licz rozkład sesji w godzinach, nie sumę dzienną — dla licencji liczy się szczyt, nie łączna liczba logowań.
- Zestaw wyniki z co najmniej tygodnia pracy; pojedynczy dzień bywa nietypowy.
- Zwróć uwagę na adresy IP spoza sieci firmowej — przy pracy wyłącznie stacjonarnej to sygnał wymagający wyjaśnienia.
- Sprawdź logowania poza godzinami pracy magazynu; nie muszą oznaczać nadużycia, ale zasługują na weryfikację.
- Ustaw rozsądny czas wygaśnięcia sesji bezczynnej — zawyżony pomiar bierze się zwykle z niezamkniętych przeglądarek.
- Archiwizuj wpisy starsze niż okres potrzebny do analizy; tabela rośnie z każdym logowaniem.
Rozkład liczby równoległych sesji w poszczególnych godzinach ostatniego tygodnia — podstawa doboru liczby stanowisk:
SELECT CAST(KIEDY AS date) AS DZIEN,
DATEPART(HOUR, KIEDY) AS GODZINA,
COUNT(DISTINCT SESSIONID) AS SESJI,
COUNT(DISTINCT USERNAME) AS UZYTKOWNIKOW
FROM dbo._licencja
WHERE KIEDY >= DATEADD(DAY, -7, GETDATE())
GROUP BY CAST(KIEDY AS date), DATEPART(HOUR, KIEDY)
ORDER BY SESJI DESC;
Różnica między kolumnami SESJI i UZYTKOWNIKOW pokazuje, ilu użytkowników pracuje na dwóch urządzeniach jednocześnie — to zwykle magazynierzy z terminalem mobilnym.
Rozliczenie licencji oparte na pomiarze zamiast na szacunku bywa korzystne dla obu stron: firma nie kupuje stanowisk, których nie wykorzysta, a jednocześnie unika sytuacji, w której limit blokuje pracę w szczycie. Dane potrzebne do tej rozmowy są już w bazie.
Powiązane tabele i dokumentacja
Rejestr licencyjny warto czytać razem z pozostałymi zapisami dotyczącymi użytkowników i sesji: