Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Tom
Thema: SQL-Query-Timeout - aber nicht im Management Studio
Am im Forum: Datentechnologien

Hi,

vereinfacht erklärt, erstellt der SQL Server für jedes Query einen Plan (Compiled Execution Plan). Dieser beinhaltet z.B. welche Objekte (Tabellen, Spalten etc) benötigt werden und wie diese miteinander agieren, damit du dein Ergebnis bekommst. Dieser Plan beinhaltet auch ob und welche Indizes genutzt werden sollen und wieviele Datensätze pro Tabelle vorraussichtlich geholt werden müssen.
Das letztere ist nur eine Schätzung auf Grund der Statistiken, welcher der SQL Server bei jeder Tabelle hinterlegt hat. (Die Kardinalität ist hier der entscheidende Faktor)
Auf Grund dieses Plans reserviert der SQL Server auch eine gewisse Menge an RAM, welches explizit dem Query zur Verfügung steht.

Wenn du jetzt aber sagst du hast 30 Parameter, dann vermute ich, dass diese wohl einen großen Einfluss auf den eigentlichen Ablauf des Querys haben.
Z.B. könnte ich mir vorstellen das aus einer TabelleA nur 1 Datensatz benötigt wird und bei einem neuen Lauf mit geänderten Parameter benötigt man vielleicht 10.000 Datensätze.

Mein Tipp ist, wenn das Query schnell genug ist und es wird mit OPTION (RECOMPILE) behoben, dann lass es so.
Wenn nicht, dann solltest du dir Gedanken machen wie du das große Query in kleinere unterteilen kannst.
Oder vielleicht mal die ganze Architektur überdenken, weil vernünftig hört sich das mit 30 Parameter nicht an

Wegen Skripte für Performance Fragen empfehle ich meinen Kunden immer die Skriptsammlung von Brent Ozar.
Für dich wäre z.B. https://www.brentozar.com/blitzcache/multiple-plans/ interessant.

Schönen Gruß
Tom

Thema: SQL-Query-Timeout - aber nicht im Management Studio
Am im Forum: Datentechnologien

Das hört sich eher nach einem Problem mit Parameter Sniffing an.
Probier doch mal OPTION (RECOMPILE) - Query Hints (Transact-SQL) - SQL Server

Wirst ja hoffentlich nicht ständig den SQL Server neustarten wollen ...

Schönen Gruß
Tom

Thema: MSSQL Jobs überwachen - zu lange Laufzeiten
Am im Forum: Datentechnologien

Meiner Erfahrung nach, wirst du über die (zu erwartende) Datenmengen nicht an Laufzeiten kommen.

Das klappt oft nur bei simplen Sachen. Wie z.B. einem simplen Insert. Weil das Nadelöhr ist da z.B. I/O und wenn es ein vernünftiges Storagekonzept ist, sollte die Performance relativ stabil sein.

Mach das doch erst einmal über eine Tabelle. Hinterleg den Job mit der maximalen Laufzeit dort.
Die joinst du mit meinen Statement und schon bekommst du alle Jobs mit zu langer Laufzeit.

In einem zweiten Schritt könntest du dann z.B. deine Tabelle, in Betracht der durchschnittlichen Laufzeiten eines vernünftig gewählten Zeitraums, aktualisieren.

Thema: MSSQL Jobs überwachen - zu lange Laufzeiten
Am im Forum: Datentechnologien

Woher weisst du dann, dass der Job zu lange läuft?
Ist das ein Erfahrungswert oder wie entscheidest du aktuell, dass der Job zu lange läuft.

Thema: MSSQL Jobs überwachen - zu lange Laufzeiten
Am im Forum: Datentechnologien

Die aktuell laufenden Jobs bekommst du über die sysjobactivity Tabelle.

Z.B. alle laufenden Jobs mit Startzeitpunkt:


SELECT t1.job_id,
       t1.name,
       t2.start_execution_date
FROM msdb.dbo.sysjobs t1
    INNER JOIN msdb.dbo.sysjobactivity t2 ON t2.job_id = t1.job_id
WHERE t2.session_id = (SELECT MAX(session_id) FROM msdb.dbo.syssessions)
      AND t2.start_execution_date IS NOT NULL
      AND t2.stop_execution_date IS NULL
ORDER BY t2.run_requested_date ASC;

Thema: MsSql - Server - Agent: Einfacher Job schlägt ständig fehlt
Am im Forum: Datentechnologien

Du musst erst einmal feststellen was genau den Deadlock verursacht.

Brent Ozar hat da erst kürzlich eine kleine Zusammenfassung dazu erstellt:
Brentozar.com: Troubleshoot Blocking & Deadlock

Thema: MSSQL-DB nach Wiederherstellung: "auto_increment" nicht gesetzt und Primary Key fehlt
Am im Forum: Datentechnologien

Wie kann sich denn bei einem normalen Backup/Restore die Tabellenstruktur ändern? ...

Ich würde an deiner Stelle mal dein Backup und Restore anschauen. Das muss ja irgendwie ausserhalb der Norm sein.

Den Increment von einer Tabelle kannst du auch nachträglich mit


DBCC CHECKIDENT('<SCHEMA.TABELLENNAME>')

korrigieren.

Siehe https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-checkident-transact-sql?view=sql-server-2017

Thema: Datensätze in Chunks löschen: Gibt es eine einfachere Lösung?
Am im Forum: Datentechnologien

Ich nutze für 'Chunk' Operation immer dieses Skript:


WHILE ( 1 = 1 )
    BEGIN
        BEGIN TRANSACTION;
    
        DELETE TOP ( 500 )
        FROM    dbo.table1
        WHERE   condition IS NULL;
    
        IF @@ROWCOUNT = 0 -- terminating condition;
            BEGIN
                COMMIT TRANSACTION;
                BREAK;
            END;
    
        COMMIT TRANSACTION;
    END;

Die Anzahl der Rows ist natürlich immer situationsabhängig.
Musst du Millionen von Datensätzen löschen, würde es mit 500 länger dauern, als wenn du z.B. 10000 auf einmal löscht.
Generell solltest aber das machen was dein DBA dir vorgibt. Vorausgesetzt er kennt sich aus ;)

Thema: Cloud - einzelne Ordner synchronisieren
Am im Forum: Smalltalk

Hi,

bei Dropbox kannst du am PC auch auswaehlen welche synchronisierte Ordner du nutzen willst.
Nennt sich 'Selective Sync' und befindet sich bei den Erweiterten Eigenschaften.
Brauchst also nicht mehrere Accounts.

Wie das bei Smartphones aussieht weiss ich nicht, nutze Dropbox nur am PC.

Gruss,
Tom

Thema: Minimalbeispiel SqlDependency
Am im Forum: Datentechnologien

Hi,

wenn ich das mit Using SqlDependency to Detect Changes in the Server vergleiche fehlt cmd.ExecuteReader() ?

Zitat
Execute the command using any of the Execute methods of the SqlCommand object. Because the command is bound to the notification object, the server recognizes that it must generate a notification, and the queue information will point to the dependencies queue.

Gruss,
Tom

Thema: Großer Build mit Visual Studio trotz SSD nicht nennenswert schneller?
Am im Forum: Smalltalk

Hi,

wenn man die Screenshots auch so vergleicht, sieht es ja so aus als wird bei Khalid die Platte nicht über AHCI angesprochen werden.
Was dann zumindest die schlechteren Werte erklären würde.

Gruss,
Tom

Thema: Suche Buch zu Active Directory...
Am im Forum: Buchempfehlungen

Hallo,

ich kenne kein Buch ueber die Abfrage vom ADS. Aber es gibt doch viele Beispiele und Howtos im Netz.

Z.B ein sehr gutes: Howto: (Almost) Everything In Active Directory via C#

Gruss,
Tom

Thema: Video über Udp senden. Massive Artefakte
Am im Forum: Netzwerktechnologien

Hi,

Streaming von Videos ist nicht so simpel wie es aussieht ;)

Du kannst nicht einfach hergehen und byteweise das Zeug über den Äther schicken.
Es gibt dafür Transport Protokolle. Siehe z.B. Wikipedia: MPEG Transport Stream

Am einfachsten ist es wohl per VLC zu streamen.

Ansonsten musst du dir die Transportprotokolle anschauen.
Wenn ich mich nicht ganz irre dürfte ISO/IEC 13818-1:2000 schon mal ein guter Anfang sein.

Ich würde mir eine Komponente holen (z.B. VideoCapX) oder halt VLC dazu nutzen, alles andere artet schnell aus.

Gruß,
Tom

Thema: Druckerport eines Druckers auslesen
Am im Forum: Rund um die Programmierung

Hallo,

ich versteh zwar den Einwand von WMI und Win7 nicht, aber mit GetPrinter und der PRINTER_INFO_2 Structure kriegst du auch den PortName.

Gruß,
Tom

Thema: Datetime.toString() Format Problem
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo zerberos,

schau dir mal im Visual C# 2008 - openbook das letzte Kapitel an.

Zitat
/ = Es wird das Standardtrennzeichen für Datumsangaben eingesetzt.

Nutz den DateTimeFormatInfo.InvariantInfo Provider. Der hat den / als Trennzeichen.

Gruß,
Tom

Thema: Wikipedia sendet Fehler zurück
Am im Forum: Netzwerktechnologien

Hallo digi333,

Wikipedia will einen UserAgent übermittelt bekommen. Dabei ist es glaub ich sogar egal was du da reinschreibst.

Gruß,
Tom

Thema: Suche Programm für Datensynchronisierung zwischen zwei PCs
Am im Forum: Smalltalk

Servus!

Kannst auch mal das SyncToy von MS anschauen.

Gruß,
Tom

Thema: Wie Grafikformat aus Image-Objekt einer Bilddatei erhalten?
Am im Forum: Grafik und Sound

Das Problem ist der bescheuerte override von ToString. Naja zumindest für den Entwickler bescheuert, nicht aber fürs Framework.

Die müssten da equals anstatt == verwenden, dann würde man auch von RawFormat den ImageFomat auf anhieb vergleichen können.
Denn bei RawFormat wird ein neuer ImageFormat erstellt anstatt die statischen ImageFormats zurückzugeben.

Folgender Code veranschaulicht das Problem:


Bitmap bitmap = new Bitmap(@"C:\temp\test.jpg");

ImageFormat imageFormat = new ImageFormat(bitmap.RawFormat.Guid);

Console.WriteLine(imageFormat);

Console.WriteLine("Guid the same: " + (imageFormat.Guid == ImageFormat.Jpeg.Guid));

Console.WriteLine("Image types the same: " + (bitmap.RawFormat == ImageFormat.Jpeg));

Console.WriteLine("Image types really not the same?: " + bitmap.RawFormat.Equals(ImageFormat.Jpeg));

Console.WriteLine(ImageFormat.Jpeg.Guid + " | " + ImageFormat.Jpeg);

Console.ReadKey();

ToString ist hier eigentlich nur für die statischen Klassen vernünftig nutzbar.

Gruß,
Tom

Thema: Wie Grafikformat aus Image-Objekt einer Bilddatei erhalten?
Am im Forum: Grafik und Sound

Servus,

ich hab das so vor einiger Zeit gelöst gehabt:

        
public static ImageFormat GetImageFormat(Image image)
{
   PropertyInfo[] propertyInfos = typeof(ImageFormat).GetProperties(BindingFlags.Public | BindingFlags.Static);

   // Have to check via Equals otherwise it cannot be compared
   foreach (PropertyInfo info in propertyInfos)
      if (info.GetValue(null, null).Equals(image.RawFormat))
         return (ImageFormat)info.GetValue(null, null);

   // Return MemoryBmp as default
   return ImageFormat.MemoryBmp;
}

Hatte bisher keine Probleme damit.
Solltest du performance benötigen kannst du auch noch eine Liste zum vergleichen aufbauen und die ständig abfragen.

Gruß,
Tom

Thema: double.Parse mit InvariantCulture liefert unerwarteten Wert
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo tequila,

ja natürlich kann es passieren das beim konvertieren von Daten Werte verfälscht werden können. Deshalb muss man da ganz genau wissen was rein geht und was hinten raus kommen soll.

Und wie gesagt wenn du bei Parse InvariantCulture angibst, geht er davon aus das dein string der rein geht invariant ist und das müsstest du sicherstellen.

Solltest du nur den Namen der Spalte kennen, kannst du auch SqlDataReader.GetOrdinal nutzen um den Index für SqlDataReader.GetDouble zu bekommen.

Gruß,
Tom

Thema: double.Parse mit InvariantCulture liefert unerwarteten Wert
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi,

naja du solltest dir noch einmal Double.Parse anschauen. Es erwartet einen double als string der bei dir InvariantCulture sein sollte. 2,00 ist aber deutsch und nicht invariant.
Eine Lösung wäre es SqlDataReader.GetDouble zu verwenden, oder halt den richtigen FormatProvider anzugeben.

Btw würde ich für monetäre Variablen decimal als Datentyp verwenden.

Gruß,
Tom

Thema: Betreibssystemversion auslesen?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi,

MSDN: GetProductInfo liefert dir das gewünschte.

Hier gibts auch schon ein recht guten Code Snippet: Determine Windows Version and Edition with C#

Gruß,
Tom

Thema: PDF Seite als image
Am im Forum: Rund um die Programmierung

Hallo,

für nicht kommerzielle Projekte ist hier eine Möglichkeit angegeben:
http://www.mobileread.com/forums/showthread.php?t=10137

Kommerziell kostets wieder.

Gruß,
Tom

Thema: MJPEG Stream aufzeichnen
Am im Forum: Grafik und Sound

Hi,

könntest dir auch die AForge.Net Lib anschauen. Dort gibts auch einen AVIWriter.

Gruß,
Tom

Thema: Auf Registry domänenübergreifend und remote zugreifen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Über WMI kannst du den User festlegen.

Siehe:
WMI remote registry zugriff klapt nicht
Registry-Key auf Remote-Computer setzen

Gruß,
Tom

Thema: Auf Registry domänenübergreifend und remote zugreifen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Naja also generell geht das so.
Die Frage ist nur ob du mit deinem Account auch drauf kommst.
Das würde meiner Meinung nach definitiv gehen wenn die 2 Domains trusted sind und dein Account auch auf beiden funktioniert.
Solltest du für die andere Domain einen anderen Account (Login oder PW unterschiedlich) haben, dann geht das so ohne weiteres nicht. Dann müsstest du Impersonation nutzen oder per WMI zugreifen (dort könntest du User/PW setzen).

Sollten beide Accounts gleich sein, kann es sein das es geht. Ich weiss nicht inwiefern OpenRemoteBaseKey die Domain prüft.

Gruß,
Tom

Thema: Auf Registry domänenübergreifend und remote zugreifen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi,

ich denke du wirst Impersonation nutzen müssen. Ausser dein Account ist auf beiden Domains gleich (selbst dann bin ich mir nicht ganz sicher).

Was ist denn der genaue Fehler? Findet er die Remote Maschine nicht, weil du das mit dem FQDN geschrieben hast?

Gruß,
Tom

Thema: BCC Net.Mail
Am im Forum: Netzwerktechnologien

Hi,

du müsstest mal bei Strato nachfragen wieviel BCCs die erlauben.
Normalerweise bist du da limitiert (50 oder evtl 100).
Rein technisch weiss ich nicht wo da die Limitierung ist.
Ich hab da vor Jahren glaub maximal 50 Adressen wegen der Limitierung des Email Servers rausschicken können.

Gruß,
Tom

Thema: [gelöst] Visual Studio 2008 zeigt Projekteigenschaften-Fenster nicht mehr an
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hi,

Entweder du schaust unter Computerverwaltung -> Ereignisanzeige,

oder gib 'eventvwr' in Start -> Ausführen ein.

Gruß,
Tom

Thema: [gelöst] Visual Studio 2008 zeigt Projekteigenschaften-Fenster nicht mehr an
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hi,

das Problem hatte ich bisher noch nicht, aber schau doch mal im EventLog nach.
Evtl. steht dort der Fehler und du kannst dann danach suchen.

Gruß,
Tom