Laden...
T
Tom myCSharp.de - Member
Datawarehouse Architect / Business Intelligence Specialist Home is where my notebook is Dabei seit 16.06.2006

Forenbeiträge von Tom Ingesamt 433 Beiträge

17.06.2022 - 07:40 Uhr

Mein erster Gedanke wäre, einfach alle paar x Minuten ein SSIS Job starten, welcher die Daten rüber schaufelt.

In welchem Zeitrahmen müssen den die Daten in der Instanz B verfügbar sein und wie häufig kommen neue Daten rein?

08.04.2021 - 14:41 Uhr

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

08.04.2021 - 12:10 Uhr

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

02.03.2019 - 07:39 Uhr

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.

01.03.2019 - 10:59 Uhr

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.

28.02.2019 - 17:11 Uhr

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;

12.12.2018 - 08:12 Uhr

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

05.12.2018 - 11:37 Uhr

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

03.09.2018 - 08:33 Uhr

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 😉

15.10.2012 - 08:36 Uhr

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

04.05.2011 - 21:57 Uhr

Hi,

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

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

03.03.2011 - 17:19 Uhr

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

12.05.2010 - 09:29 Uhr

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

05.03.2010 - 18:21 Uhr

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

23.02.2010 - 11:13 Uhr

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

19.02.2010 - 09:34 Uhr

Hallo zerberos,

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

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

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

Gruß,
Tom

16.02.2010 - 11:24 Uhr

Hallo digi333,

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

Gruß,
Tom

15.02.2010 - 22:13 Uhr

Servus!

Kannst auch mal das SyncToy von MS anschauen.

Gruß,
Tom

15.02.2010 - 15:02 Uhr

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

15.02.2010 - 13:17 Uhr

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

14.02.2010 - 11:44 Uhr

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

13.02.2010 - 23:24 Uhr

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

10.02.2010 - 15:47 Uhr

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

03.02.2010 - 22:23 Uhr

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

30.01.2010 - 11:00 Uhr

Hi,

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

Gruß,
Tom

28.01.2010 - 17:57 Uhr

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

28.01.2010 - 15:21 Uhr

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

28.01.2010 - 10:50 Uhr

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

25.01.2010 - 13:19 Uhr

Hi,

Entweder du schaust unter Computerverwaltung -> Ereignisanzeige,

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

Gruß,
Tom

25.01.2010 - 11:18 Uhr

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

14.01.2010 - 14:01 Uhr

Jo für SI würde ich auch das Snippet nutzen.

Gruß,
Tom

14.01.2010 - 13:09 Uhr

Hi,

verstehe ich jetzt nicht ganz. Du hast doch die Lösung in deinem geposteten Link.

Nutz einfach die Variante mit E.

Oder überseh ich gerade etwas? 😃

Gruß,
Tom

03.12.2009 - 16:32 Uhr

Hi,

schau dir mal http://managedwifi.codeplex.com an.
Ich glaub damit kannst du evtl. die MAC Adresse holen.

Gruß,
Tom

03.12.2009 - 09:44 Uhr

Hallo ravel,

such mal bei Google nach UpdatePanel+FileUpload.
So out-of-the-box funktionieren die zwei nicht miteinander.

Gruß,
Tom

02.12.2009 - 14:12 Uhr

Hi,

du musst denn samAccountName noch setzen.

Gruß,
Tom

24.11.2009 - 11:33 Uhr

Hallo,

bin nach kurzer Google/Wikipedia Suche darauf gestossen:
Quoted-printable
C# - Quoted Printable Encoder

Vielleicht klappts damit!

Gruß,
Tom

18.11.2009 - 14:29 Uhr

Ah ok.

Ich hatte damals keinerlei Probleme mit .NET per Ftp auf die AS400 zuzugreifen.
Ich weiss aber auch das sich das von Konfiguration/Maschine stark unterscheiden kann.

Gruß,
Tom

18.11.2009 - 10:53 Uhr

Hm ... zeig doch mal den Trace damit man das Problem komplett nachvollziehen kann.

18.11.2009 - 10:44 Uhr

Das hört sich halt so nach Bastelstunde an.

Also ich sehe da zwei Möglichkeiten:

  1. Du machst dem Admin über die GL Druck und der soll sein Netzwerk mal richtig pflegen.
  2. Du bastelst dir dein Workaround für das Problem.

Gruß,
Tom

18.11.2009 - 10:35 Uhr

Schau da mal lieber im Debugger wie du die strings übergibst.
Ich glaube nicht das das .NET von sich aus macht.

Gruß,
Tom

18.11.2009 - 10:02 Uhr

Hallo cfrosch,

bei einer Intranetanwendung würde ich das Problem mit Gruppenrichtlinien / Anmeldeskripts erschlagen.

Ist denke ich mal die gängigste Methode.

Gruß,
Tom

18.11.2009 - 09:13 Uhr

Naja es geht da ja nicht nur um die Breite/Höhe der Animation.
Evtl muss ich auch die Animation an sich ändern. Oder der Sprite soll ne ganz andere Animation ablaufen lassen.

Wie immer ist Zeit und Geld der entscheidende Faktor hier.
Ich hätte daher gerne auf ein schon bestehendes System aufgesetzt.

Evtl werde ich den kompletten C# Code für die Animation freilegen und dann per CodeDom in die Applikation bringen.
Dann könnte ich zumindest alles ändern, ohne neu zu kompilieren.

Gruß,
Tom

18.11.2009 - 09:08 Uhr

Hi,

also normalerweise kann man per .NET auf die AS400 zugreifen. Es gibt da aber ein paar Konfigurationsszenarien wo es zu 'seltsamen' Problemen kommt.

Poste doch mal bitte ein Trace von TC und von .NET.

Gruß,
Tom

17.11.2009 - 16:17 Uhr

Das ist auch kein Property sondern eine Methode.

nutze einfach InvokeMethod("GetAccessMask", null).

Und was du genau zurück bekommst, solltest du aus der MSDN: GetAccessMask auslesen können.

Gruß,
Tom

17.11.2009 - 15:47 Uhr

Hallo DjBepy,

der 501 bei FTP Upload kann darauf hinweisen das dein string im FtpWebRequest.Create falsch ist.

Was genau übergibst du denn da?

Gruß,
Tom

17.11.2009 - 13:04 Uhr

Hallo Golo,

mit R# 4.5 kannst du per Solution-Wide Analysis 'Unused public methods' anzeigen lassen.
Dazu einfach nur unten rechts den grauen Kreis doppelklicken.

Die Namen der nicht genutzten Methoden werden dann wie bei unused private methods grau dargestellt.

Edit: Für eine Auflistung aller nicht genutzten Methoden wirst du auf R#5 warten müssen. Die Entwickler meinten das sie das implementieren möchten. (Keinesfalls offiziell angekündigt 😃)

Gruß,
Tom

17.11.2009 - 12:37 Uhr

Hi Durrahan,

hast du dir mal Win32_Share angeschaut?
Da heisst es das AccessMask obsolete ist und nur unter Windows NT 4.0 und Windows Me/98/95 etwas zurückliefert.

Probier mal die Methode GetAccessMask wie in den Community Beispielen angegeben.

Gruß,
Tom

17.11.2009 - 12:26 Uhr

Ja im Endzustand wird es wohl auf jedenfall eine Scriptsprache werden.
Mich graust es bloss um den Zeitaufwand um das sauber auszuarbeiten.

Ich werde mal schauen ob ich erst einmal nicht selbst so "Video Effekte" mit einem Programm erstellen kann und diese dann einfach als mpg exportiere und bei uns wieder importiere. Damit wäre mir wohl zumindest kurzfristig schon mal geholfen.

Dank dir aber vielmals für deine Ideen 😃

Gruß,
Tom

15.11.2009 - 20:18 Uhr

Hi,

ja das Tutorial kenne ich.

Was mir vorschwirrt ist etwas damit ich die Animation und den Sprite selber nicht coden muss.

Hauptsächlich geht es mir hierbei um die Animation, die müssen wir austauschbar und schnell änderbar machen ohne das ich in den Programmcode eingreifen muss.

Also irgendwie eine Art von Skripting wäre mir wohl das liebste.

Gruß,
Tom