Your query selects the entire row, which is quite big, this takes extra
time.
If possible, try selecting a subset of columns.

On Mon, Nov 25, 2024 at 2:40 PM Charlin S <charli...@hotelhub.com> wrote:

> Hi,
> Yes, It's approximately 300MB.
>
> Thanks
> Charlin
>
>
> On Mon, 25 Nov 2024 at 12:52, Pavel Tupitsyn <ptupit...@apache.org> wrote:
>
>> > How big is one row on average, in bytes?
>> > Approximately 300MB size
>>
>> 300 Megabytes, is that correct? This explains the measurements, I think.
>>
>> On Fri, Nov 22, 2024 at 4:27 PM Charlin S <charli...@hotelhub.com> wrote:
>>
>>> Hi
>>> records count  => more than 160,0000
>>> No of columns => 87 Columns (80 columns data null only)
>>> How big is one row on average, in bytes? Approximately 300MB size
>>>
>>> New stats after removing 80 columns with same no of records
>>> BenchmarkDotNet v0.14.0, Windows 10
>>> (10.0.19044.2130/21H2/November2021Update)
>>> Intel Core i5-8500 CPU 3.00GHz (Coffee Lake), 1 CPU, 6 logical and 6
>>> physical cores
>>> .NET SDK 8.0.101
>>>   [Host]     : .NET 8.0.1 (8.0.123.58001), X64 RyuJIT AVX2
>>>   DefaultJob : .NET 8.0.1 (8.0.123.58001), X64 RyuJIT AVX2
>>>
>>>
>>> | Method       | Mean     | Error    | StdDev   | Gen0      | Gen1     |
>>> Gen2     | Allocated |
>>> |-------------
>>> |---------:|---------:|---------:|----------:|---------:|---------:|----------:|
>>> | Linq         | 188.6 ms | 15.08 ms | 43.26 ms | 1000.0000 |        - |
>>>        - | 126.01 MB |
>>> | LinqCompiled | 166.8 ms |  3.24 ms |  5.23 ms |  666.6667 | 666.6667 |
>>> 333.3333 | 121.18 MB |
>>>
>>> Thanks
>>> Charlin
>>>
>>> On Fri, 22 Nov 2024 at 00:07, Pavel Tupitsyn <ptupit...@apache.org>
>>> wrote:
>>>
>>>> So how is the real data different from the test data?
>>>> - How many rows are there?
>>>> - How many columns?
>>>> - How big is one row on average, in bytes?
>>>>
>>>> On Thu, Nov 21, 2024 at 7:08 PM Charlin S <charli...@hotelhub.com>
>>>> wrote:
>>>>
>>>>> Hi,
>>>>> The summary with real data :-
>>>>> BenchmarkDotNet v0.14.0, Windows 10
>>>>> (10.0.19044.2130/21H2/November2021Update)
>>>>> Intel Core i5-8500 CPU 3.00GHz (Coffee Lake), 1 CPU, 6 logical and 6
>>>>> physical cores
>>>>> .NET SDK 8.0.101
>>>>>   [Host]     : .NET 8.0.1 (8.0.123.58001), X64 RyuJIT AVX2
>>>>>   DefaultJob : .NET 8.0.1 (8.0.123.58001), X64 RyuJIT AVX2
>>>>>
>>>>>
>>>>> | Method       | Mean     | Error    | StdDev   | Median   | Gen0
>>>>>  | Gen1      | Gen2      | Allocated |
>>>>> |-------------
>>>>> |---------:|---------:|---------:|---------:|----------:|----------:|----------:|----------:|
>>>>> | Linq         | 530.0 ms | 17.28 ms | 48.46 ms | 512.4 ms | 7000.0000
>>>>> | 3000.0000 | 1000.0000 | 999.57 MB |
>>>>> | LinqCompiled | 543.3 ms | 21.48 ms | 59.53 ms | 525.3 ms | 6000.0000
>>>>> | 2000.0000 | 1000.0000 | 994.65 MB |
>>>>>
>>>>> // * Hints *
>>>>> Outliers
>>>>>   Benchmarks.Linq: Default         -> 9 outliers were removed (722.82
>>>>> ms..1.42 s)
>>>>>   Benchmarks.LinqCompiled: Default -> 11 outliers were removed (767.85
>>>>> ms..2.67 s)
>>>>>
>>>>> Thanks
>>>>> Charlin
>>>>>
>>>>> On Thu, 21 Nov 2024 at 16:01, Pavel Tupitsyn <ptupit...@apache.org>
>>>>> wrote:
>>>>>
>>>>>> Can you adjust this benchmark project to have the data and query more
>>>>>> like your real project?
>>>>>> Currently we have a similar number of rows and the query performs
>>>>>> very well, let's understand what is different.
>>>>>>
>>>>>> On Thu, Nov 21, 2024 at 11:43 AM Charlin S <charli...@hotelhub.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Hi,
>>>>>>> Thank you for your email. I apologize for the late reply.
>>>>>>> I ran the sample and summaries are:-
>>>>>>>
>>>>>>> BenchmarkDotNet v0.14.0, Windows 10
>>>>>>> (10.0.19044.2130/21H2/November2021Update)
>>>>>>> Intel Core i5-8500 CPU 3.00GHz (Coffee Lake), 1 CPU, 6 logical and 6
>>>>>>> physical cores
>>>>>>> .NET SDK 8.0.101
>>>>>>>   [Host]     : .NET 8.0.1 (8.0.123.58001), X64 RyuJIT AVX2
>>>>>>>   DefaultJob : .NET 8.0.1 (8.0.123.58001), X64 RyuJIT AVX2
>>>>>>>
>>>>>>>
>>>>>>> | Method           | Mean        | Error    | StdDev   |
>>>>>>> |--------------------|--------------:|----------:|---------------:|
>>>>>>> | Linq                |   94.60 us | 1.515 us | 1.417 us |
>>>>>>> | LinqCompiled |  16.50 us  | 0.328 us | 0.449 us |
>>>>>>>
>>>>>>> LINQCompiled much faster than LINQ in sample code but with real data
>>>>>>> it's not much different.
>>>>>>>
>>>>>>>
>>>>>>> Thanks
>>>>>>> Charlin
>>>>>>>
>>>>>>> On Thu, 14 Nov 2024 at 20:30, Pavel Tupitsyn <ptupit...@apache.org>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> 1. Run the code in Release configuration
>>>>>>>> 2. Try Compiled Query
>>>>>>>> https://ignite.apache.org/docs/latest/net-specific/net-linq#compiled-queries
>>>>>>>>
>>>>>>>> My benchmark on 550_000 rows with 1 matching row shows 28
>>>>>>>> microseconds for regular query and 6 microseconds for compiled query:
>>>>>>>> https://gist.github.com/ptupitsyn/189c8164061bace8d975b2ec39045ca4
>>>>>>>>
>>>>>>>> 200 ms is a lot. Can you run my code and share the results?
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Thu, Nov 14, 2024 at 1:46 PM Charlin S <charli...@hotelhub.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> Hi,
>>>>>>>>> I was measuring performance after 5 times. Now I have run more
>>>>>>>>> than 100 times and  var queryRes = query.ToList(); taken 202 
>>>>>>>>> milliseconds
>>>>>>>>> as minimum.
>>>>>>>>> Will be appreciated if I get a solution for getting the result in
>>>>>>>>> 10 - 50 milliseconds.
>>>>>>>>>
>>>>>>>>> Regards,
>>>>>>>>> Charlin
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Thu, 14 Nov 2024 at 15:35, Pavel Tupitsyn <ptupit...@apache.org>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> How do you measure? Do you perform a warm up before measurement?
>>>>>>>>>> Try running the query 100 times before the measurement. Or,
>>>>>>>>>> ideally, use BenchmarkDotNet to get accurate results.
>>>>>>>>>>
>>>>>>>>>> On Thu, Nov 14, 2024 at 11:51 AM Charlin S <
>>>>>>>>>> charli...@hotelhub.com> wrote:
>>>>>>>>>>
>>>>>>>>>>> Hi,
>>>>>>>>>>> Thank you for your response.and sample.
>>>>>>>>>>> My cache instance was created as TestIcache=_ignite.
>>>>>>>>>>> GetOrCreateCache<string, TestModel>("TestModel"); so index was
>>>>>>>>>>> not applied.
>>>>>>>>>>> now I am creating cache instance like below and index applied
>>>>>>>>>>>   var cacheCfgTestModel = new CacheConfiguration("TestModel",
>>>>>>>>>>> new QueryEntity(typeof(TestModel)));
>>>>>>>>>>>          TestIcache=_ignite.GetOrCreateCache<string, TestModel>(
>>>>>>>>>>> cacheCfgTestModel);
>>>>>>>>>>>
>>>>>>>>>>> SQL:
>>>>>>>>>>> select _T0._KEY, _T0._VAL from "TestModel".TESTMODEL as _T0
>>>>>>>>>>> where (_T0.COUNTRYCODE IS NOT DISTINCT FROM ?)
>>>>>>>>>>>
>>>>>>>>>>> EXPLANATION:
>>>>>>>>>>> SELECT
>>>>>>>>>>>     _T0__Z0._KEY AS __C0_0,
>>>>>>>>>>>     _T0__Z0._VAL AS __C0_1
>>>>>>>>>>> FROM "TestModel".TESTMODEL _T0__Z0
>>>>>>>>>>>     /* "TestModel".TESTMODEL_COUNTRYCODE_ASC_IDX: COUNTRYCODE IS
>>>>>>>>>>> ?1 */
>>>>>>>>>>> WHERE _T0__Z0.COUNTRYCODE IS ?1
>>>>>>>>>>> SELECT
>>>>>>>>>>>     __C0_0 AS _KEY,
>>>>>>>>>>>     __C0_1 AS _VAL
>>>>>>>>>>> FROM PUBLIC.__T0
>>>>>>>>>>>     /* "TestModel"."merge_scan" */
>>>>>>>>>>>
>>>>>>>>>>> Total records:27713 = > 27713
>>>>>>>>>>> Time taken for Query:2 milliseconds ->  var query = TestIcache.
>>>>>>>>>>> AsCacheQueryable().Where(x => x.Value.CountryCode == CountryCode);
>>>>>>>>>>> Time taken for QueryResult:313 milliseconds -> var queryRes =
>>>>>>>>>>> query.ToList();
>>>>>>>>>>> Total Time taken:316 milliseconds
>>>>>>>>>>> Why var queryRes = query.ToList(); taking 313 milliseconds even
>>>>>>>>>>> if the result having only one record is taking nearly 300 
>>>>>>>>>>> milliseconds.
>>>>>>>>>>>
>>>>>>>>>>> Regards,
>>>>>>>>>>> Charlin
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Wed, 13 Nov 2024 at 22:36, Pavel Tupitsyn <
>>>>>>>>>>> ptupit...@apache.org> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> - This shows a full scan, the index is not being used.
>>>>>>>>>>>> - There is no parametrization, I'm not sure why. Which Ignite
>>>>>>>>>>>> version do you use?
>>>>>>>>>>>>
>>>>>>>>>>>> I've prepared a simple proof of concept [1] which shows that an
>>>>>>>>>>>> index is used in this situation. Generated SQL is different:
>>>>>>>>>>>>
>>>>>>>>>>>> >> SQL:
>>>>>>>>>>>> select _T0._KEY, _T0._VAL from "c".TESTMODEL as _T0 where
>>>>>>>>>>>> (_T0.COUNTRYCODE IS NOT DISTINCT FROM ?)
>>>>>>>>>>>>
>>>>>>>>>>>> >> EXPLAIN:
>>>>>>>>>>>> SELECT
>>>>>>>>>>>>     _T0__Z0._KEY AS __C0_0,
>>>>>>>>>>>>     _T0__Z0._VAL AS __C0_1
>>>>>>>>>>>> FROM "c".TESTMODEL _T0__Z0
>>>>>>>>>>>>     /* "c".TESTMODEL_COUNTRYCODE_ASC_IDX: COUNTRYCODE IS ?1 */
>>>>>>>>>>>> WHERE _T0__Z0.COUNTRYCODE IS ?1
>>>>>>>>>>>> SELECT
>>>>>>>>>>>>     __C0_0 AS _KEY,
>>>>>>>>>>>>     __C0_1 AS _VAL
>>>>>>>>>>>> FROM PUBLIC.__T0
>>>>>>>>>>>>     /* "c"."merge_scan" */
>>>>>>>>>>>>
>>>>>>>>>>>> [1]
>>>>>>>>>>>> https://gist.github.com/ptupitsyn/882b9b9e5e13c82fcf96f83fd53b2777
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Wed, Nov 13, 2024 at 6:41 PM Charlin S <
>>>>>>>>>>>> charli...@hotelhub.com> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>> 1. Use "==" instead of "string.Equals", looks like the
>>>>>>>>>>>>> provider does not like string.Equals.
>>>>>>>>>>>>>        changed to ==
>>>>>>>>>>>>> 2. Share the generated SQL
>>>>>>>>>>>>>
>>>>>>>>>>>>>   SELECT Field1,Field2 FROM TestModel WHERE COUNTRYCODE='AU'
>>>>>>>>>>>>> 3. Share the result of EXPLAIN for that SQL
>>>>>>>>>>>>>    plan=SELECT
>>>>>>>>>>>>>     __Z0.FIELD1 AS __C0_0,
>>>>>>>>>>>>>     __Z0.FIELD2 AS __C0_1
>>>>>>>>>>>>> FROM "TestModel".TESTMODEL __Z0
>>>>>>>>>>>>>     /* "TestModel".TESTMODEL.__SCAN_ */
>>>>>>>>>>>>>     /* scanCount: 1681786 */
>>>>>>>>>>>>> WHERE (__Z0.COUNTRYCODE = 'AU')
>>>>>>>>>>>>> 4. Is there an index on CountryCode?
>>>>>>>>>>>>>     Yes,  [QuerySqlField(IsIndexed = true)]
>>>>>>>>>>>>>         public string CountryCode { get; set; }
>>>>>>>>>>>>>
>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>> Charlin
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Wed, 13 Nov 2024 at 15:06, Pavel Tupitsyn <
>>>>>>>>>>>>> ptupit...@apache.org> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> 1. Use "==" instead of "string.Equals", looks like the
>>>>>>>>>>>>>> provider does not like string.Equals
>>>>>>>>>>>>>> 2. Share the generated SQL
>>>>>>>>>>>>>> 3. Share the result of EXPLAIN for that SQL
>>>>>>>>>>>>>> 4. Is there an index on CountryCode?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Wed, Nov 13, 2024 at 9:16 AM Charlin S <
>>>>>>>>>>>>>> charli...@hotelhub.com> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>> Thanks for your response.
>>>>>>>>>>>>>>> I have tried different ways but the result is the same.
>>>>>>>>>>>>>>> my cache records count is above 160,0000
>>>>>>>>>>>>>>> var watchLINQQuery = System.Diagnostics.Stopwatch.StartNew();
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>       var tmp=  TestIcache.AsEnumerable().Where(tc=> string.
>>>>>>>>>>>>>>> Equals(tc.Value.CountryCode, CountryCode)).Select(tc => tc.
>>>>>>>>>>>>>>> Value);
>>>>>>>>>>>>>>>       watchLINQQuery.Stop(); //0 or 1 Milliseconds
>>>>>>>>>>>>>>>       var watchIQueryableToArray = System.Diagnostics.
>>>>>>>>>>>>>>> Stopwatch.StartNew();
>>>>>>>>>>>>>>>       var result = tmp.ToArray(); // 12354 milliseconds
>>>>>>>>>>>>>>> taken
>>>>>>>>>>>>>>>       watchIQueryableToArray.Stop();
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> var result = tmp.ToArray(); taking similar time even if my
>>>>>>>>>>>>>>> query result returns 1 or 2 records. Please suggest to me how 
>>>>>>>>>>>>>>> to improve
>>>>>>>>>>>>>>> this query performance.
>>>>>>>>>>>>>>> Regards,
>>>>>>>>>>>>>>> Charlin
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Tue, 5 Nov 2024 at 19:01, Pavel Tupitsyn <
>>>>>>>>>>>>>>> ptupit...@apache.org> wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> 1. Check the generated SQL
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> // Cast to ICacheQueryable
>>>>>>>>>>>>>>>> var cacheQueryable = (ICacheQueryable) query;
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> // Get resulting fields query
>>>>>>>>>>>>>>>> SqlFieldsQuery fieldsQuery =
>>>>>>>>>>>>>>>> cacheQueryable.GetFieldsQuery();
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> // Examine generated SQL
>>>>>>>>>>>>>>>> Console.WriteLine(fieldsQuery.Sql);
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> 2. Try EXPLAIN and other suggestions from
>>>>>>>>>>>>>>>> https://ignite.apache.org/docs/latest/SQL/sql-tuning
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> 3. Is there an index on CountryCode?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> 4. Case-insensitive comparison might be inefficient. A
>>>>>>>>>>>>>>>> better approach is to store lower/uppercase value in cache, 
>>>>>>>>>>>>>>>> and then using
>>>>>>>>>>>>>>>> lower/upper criteria for search
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Tue, Nov 5, 2024 at 1:08 PM Charlin S <
>>>>>>>>>>>>>>>> charli...@hotelhub.com> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Hi  Pavel,
>>>>>>>>>>>>>>>>> Thanks for your email. it reduces to 9 seconds after
>>>>>>>>>>>>>>>>> removing AsParallel. Please let me know if there are any more 
>>>>>>>>>>>>>>>>> options to
>>>>>>>>>>>>>>>>> get good performance.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Regards,
>>>>>>>>>>>>>>>>> Charlin
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Tue, 5 Nov 2024 at 13:31, Pavel Tupitsyn <
>>>>>>>>>>>>>>>>> ptupit...@apache.org> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Hi, "AsParallel" is the problem, it causes the entire
>>>>>>>>>>>>>>>>>> data set to be loaded locally before filtering.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Remove it so that the LINQ expression can be translated
>>>>>>>>>>>>>>>>>> into Ignite SQL and executed more efficiently.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> https://ignite.apache.org/docs/latest/net-specific/net-linq
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> On Tue, Nov 5, 2024 at 8:58 AM Charlin S <
>>>>>>>>>>>>>>>>>> charli...@hotelhub.com> wrote:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Hi All,
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> I am trying Ignit.Net LINQ for the first time and seeing
>>>>>>>>>>>>>>>>>>> very slowness with my linq query taking 13-15 seconds. Test 
>>>>>>>>>>>>>>>>>>> model having
>>>>>>>>>>>>>>>>>>> 550,000 records
>>>>>>>>>>>>>>>>>>> my query as below
>>>>>>>>>>>>>>>>>>> TestModel having index for CountryCode field.
>>>>>>>>>>>>>>>>>>> ICache<string, TestModel> cache =
>>>>>>>>>>>>>>>>>>> ignite.GetCache<string, TestModel>(CacheName);
>>>>>>>>>>>>>>>>>>> IQueryable<ICacheEntry<string, TestModel>>  i
>>>>>>>>>>>>>>>>>>> gniteQuerable  = cache.AsCacheQueryable();
>>>>>>>>>>>>>>>>>>> igniteQuerable.AsParallel()
>>>>>>>>>>>>>>>>>>>             .Where(x=>string.Equals(x.Value.CountryCode,
>>>>>>>>>>>>>>>>>>> criteria.CountryCode, StringComparison.
>>>>>>>>>>>>>>>>>>> CurrentCultureIgnoreCase))
>>>>>>>>>>>>>>>>>>>             .Select(x => x.Key).ToList();
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Regards,
>>>>>>>>>>>>>>>>>>> Charlin
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>

Reply via email to